-
port a kann als ad-wandler benutzt werden,
den man recht einfach auslesen kann.
geht mit 10 bit, also 1024 abstufungen möglich.
es wird der spannungswert im verhältnis einer
referenzspannung gemessen.
den rest kannste dir auch selber mal gedanken machen
-
So ich wollte jetzt erstma kleiner anfangen, da ich des mitm poti net hinbekomm. Ich wollts jetzt so machen, dass wenn ich den taster drücke einmal, dass dann die blitzer losgehen. Aba irgendwie funzt des net. Hier mal mein Programmcode von bascom:
Code:
$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output
Config Portd = Input
Do
A:
If Pind.2 = 0 Then
Goto B
Else
Goto C
End If
B:
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 400
C:
Loop
Des blinkt irgendwie von anfang an............
MFG
Nrg
-
du solltest im else teil wieder nach A: springen, damit das programm die taste sofort wieder abfragt... so wie bei dir sollte es aber auch laufen...
wie sieht die hardware aus? wie ist die tastze angeschlossen? richtiger port? pull-uop?
-
ich habe das my avr board. Der Taster ist eigentlich richtig angeschlossen. Ich versuche es mal mit else goto a.
Danke!
MFG
NRG
-
auf dem board ist kein externe pullup-widerstnad dfrauf... du müsstest also den internen aktivieren...
nach den ganze config befehlen
portd.2 = 1
aber im simulator läufts auch damit sofort durch...
-
so gehts im simulator: die if abfrage muss in eine zeile! an dieser stelle finde ich basic echt sch****... in pascal teilt man dem compiler mit nem ; mit, dass der befehl zu ende ist, und alles ist in butter...
$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output
Config Portd = Input
portd.2 = 1
Do
A:
If Pind.2 = 0 Then Goto B Else Goto C
B:
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 400
C:
Loop
-
Also ich habs jetzt so gemacht und es funzt!!! juhu!!!
Code:
$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output
Config Portd = Input
Do
A:
If Pind.2 = 0 Then
Goto B
Else
Goto A
End If
Loop
End
B:
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 400
Goto A
werd mich dann mal an die geschwindigkeit machen......
Nur kann mir vielleicht jemand nen denkanstoß geben, wie ich die stellung vom poti in ne zahl umwandle???
MFG
Nrg
-
in der bascom hilfe, stichwörter "getadc" und "config adc"
die forensuche benutzen (das thema hatten wir schon x mal...)
und die referenzspannung keinesfalls als "internal" konfigurieren...
-
hmmm............... ja ok! Danke ich werds mal versuchen!!! Danke!!
O:)
Habs jetzt mal so gemacht!! Stimmt des so oder gibts noch verbesserungsvorschläge? also funzen tuts!!!
Code:
$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim W As Word , Channel As Byte
Channel = 0
A:
Do
W = Getadc(channel)
Goto B
Loop
End
B:
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 400
Goto A
Mfg
Nrg
-
reference würde ich nocht auf internal lassen (einfach weglassen)... auf deinem board ist nämlich der anschluss für die ferenzespannung schon mit 5V verbunden...
das do... loop kannst du dir sparwen weil das loop sowieso nie erreicht werden kann... und entscheid dich dann mal ob du assemblermäßig mit sprungmarlen oder hochsprachenmäßig mit if then else oder do loop programmieren willst... in hochsprachen sind sprungmarken verpönt, aber in basic gehst wohl teilweise nicht anders...