Guten Morgen : )
Ich stehe seit vorgestern vor einer Aufgabe dessen Lösung mir
Kopfzerbrechen bereitet))
Ich habe schon im Forum gesucht und zu dem Thema etwas gefunden
(pulslänge zählen und gleichzeitig eine paar segment anzeigen
multiplexen) - Ständig habe ich mich gefragt, wie soll dass gehen wenn -
sonst habe ich immer einer variable hochgezählt und beim einer erneuten
low/high flanke hatte ich den wert, jedoch würde solange die anzeige
dunkel bleiben - jetzt weiss ich , dass ich mit timer und interrupts
arbeiten muss.
Gestern bin ich davon ausgegangen, dass mir ein anderer Atmega 8 die
länge zwischen den impulsen als string über den print befehl schickt und
ich den mit meinem "segment multiplex atmega" nehme und anzeige. Mein
programm funktionierte tadellos, wenn ich variable d schon vorgebe.
$regfile = "m8def.dat"
'ATMEGA8-Deklarationen
$crystal = 1000000
$baud = 9600 'für Segm.
ansteuerung reicht der interne quarz
' Ein-/Ausgänge
Config Portb = Output 'Port B als
Ausgang
Config Portd = Output
Portd = &B11111111
Portb = &B11111111 'vorerst auf
"aus" da pnp transis noch nicht angesteuert werden müssen bzw sollen
Dim I As Byte 'zaehler
variable
Dim X(14) As Byte 'speichert
value table im array
'++++++++++++++++++++++++++++++string auseinandernehmen+++++++++
Dim D As String * 5 'eigentliche
Drehzahl als Zahl als string - später über uart zugesendet
Dim J As Byte 'zähler
variable
Dim K(4) As String * 1 'hier werden
die abgeschnittenen zahlen von d hineingelegt
'Dim K(4) As Byte
Dim E As Byte 'bekommt den
string wert von k xxx als variable zugewiesen
Dim Z As Byte 'uart
'++++++++++++++++++++++++++++++++++++
Restore Value_table
For I = 1 To 14
Read X(i) 'lade
tabelle in byte array siehe buch keuhnel s. 171
Next
D = "1337" 'zahl die
auf segmente angezeigt werden soll
Do
If Usr.rxc = 1 Then 'Wenn Byte
empfangen...
Z = Udr
D = Str(z)
'Byte aus UART
auslesen
Else
D = D
End If
For J = 1 To 4
K(j) = Mid(d , J , 1 )
'd ist die zahl die später als string variable im eingangspuffer des
uarts
'den 4 stelligen string wird geteilt und in k1 bis geschoben
Next
'so, zahl wurde zerteilt - nun weiter!
For J = 1 To 4
'+++++++++++++++11111111111111111111111111
'jenachdem welche stelle ausg. werden muss, wird entspr. portd
gesteuert (pin d2 - d5 mit x(11) bis x(15))
Portd = X(9 + J)
'++++++++++++++++++++++++++
'soll eine abgeschn. zahl an port b ausgeben - zahl im array k(j)
gespeichert
E = Binval(k(j)) 'hier wird
aus dem string eine variable gemacht
' E = K(j)
Portb = X(e)
'ausgabe der ziffer an
portb (ziffer aus k4 schublade entspricht adresse entspr. muster der
ziffer aus value table
Waitms 2
Portb = &B11111111
Next
Loop
End
Value_table:
' 1 2 3 4 5 6 7 8 9
Data &B11111001 , &B10100100 , &B10110000 , &B10011001 , &B10010010 ,
&B10000010 , &B11111000 , &B10000000 , &B10010000
' hier sind die muster für portd definiert um die ausgabe auf die
entspr. segmente zu steuern
' Ziffer 1 Ziffer 2 Ziffer 3 Ziffer 4
Data &B11111011 , &B11110111 , &B11101111 , &B11011111
Wenn ich jetzt aber einen string ueber meinen zweiten mikrocontroller
senden will, dann habe ich nur komische zahlen - auch zb zeigt er ein
zeichen an was garnicht in der value table gespeichert ist.
Dazu der code vom Atmega der "sendet"
$regfile = "m8def.dat"
'ATMEGA8-Deklarationen
$crystal = 1000000
$baud = 9600
Dim B As String * 5 'enthält
wert f+r print befehl
Do
B = "1336"
Print B
Waitms 10000
Loop
End
Der senden Atmega hat nur gnd und vcc und rxd mit txd des 2 .
Controllers verbunden und umgekehrt. Vielleicht endeckt ihr das problem
(( Nichtsdestotrotz würde ich heute event. den weg angehen das ganze
mit einem avr zu loesen aber mich interessiert, warum dieser befehl bei
dem man eigenlich nicht viel verkehrt machen kann - nicht funktioniert
((
Ich hoffe ich habe alles verständlich rueber gebracht)) und freue mich
auf eure Antworten!
Gruss Axel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.