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.