Hi, ich versuche gerade eine Sieben-Segment-Anzeige zu programmieren und da krieg ich probleme. Denn die Ausgänge zu einem BCD zu 7-Segm. Baustein fangen nicht beim PortD.0 sondern bei PortD.4 an! Ich versuche es jetzt schon über 2h den AVR davon zu überzeugen die Ausgabe erst ab D.4 zu beginnen...der ist allerdings nicht einverstanden. Ich habe schon einige Sachen getestet jedoch funktioniert da nichts von. Hat einer von euch eine Idee wie man das lösen kann? Gruss Zippo
da Code und Schaltung anscheinend geheim sind muss ich mal raten in C wäre was in dieser Richtung ein Anfang...(BCD<<PD4)
Na so was!!! Der Code ist nicht geheim! Ich hatte ihn auch angehängt nur erscheint er nicht! Also kopier ich ihn mal ein $regfile = "m8def.dat " $crystal = 1000000 $baud = 2400 Ddrb = &B00111000 Portb = &B00111000 Config Portd.4 = Output Config Portd.5 = Output Config Portd.6 = Output Config Portd.7 = Output Dim A As Long Dim A1 As Long Dim Ganzevolt1 As Long Dim Ganzevolt As Long Dim Kommavolt As Long Dim X As Byte Dim Y As Long Dim Y1 As Long 'Dim Adcwert As Word Config Adc = Single , Prescaler = Auto , Reference = Avcc Const Adcwert = 1000 Do 'Adcwert = Getadc(0) A1 = Adcwert * 200 A = A1 / 1023 Ganzevolt = A / 10 Ganzevolt1 = Ganzevolt * 10 Kommavolt = A - Ganzevolt1 Select Case Ganzevolt Case Is < 10 : X = 0 Case Is >= 10 : X = 1 Case Is >= 20 : X = 2 End Select Y1 = X * 10 Y = Ganzevolt - Y1 Print X ; Y ; "," ; Kommavolt 'X = Makebcd(x) Portd = X Portb.3 = 0 Waitms 10 Portb.3 = 1 'Y = Makebcd(y) Portd = Y Portb.4 = 0 Waitms 10 Portb.4 = 1 'Kommavolt = Makebcd(kommavolt) Portd = Kommavolt Portb.5 = 0 Waitms 10 Portb.5 = 1 Loop
wie ich schon geschrieben hab: die BCD-Zahl einfach mal 4 Stellen nach links shiften...
> wie ich schon geschrieben hab: die BCD-Zahl einfach mal 4 Stellen nach > links shiften... Das ist da erstmal richtig. Trotzdem frage ich mich immer wieder, warum man ein Problem so umständlich löst. An BASCOM kann es doch nicht liegen, denn auch mit BASCOM kann man halbwegs effizient programmieren. Hier ein Beispiel (mein erstes und vermutlich einziges BASCOM-Programm): http://www.hanneslux.de/avr/divers/pm24/VM_tn24_1.bas Es ist Teil dieser Spilerei mit dem Tiny24: http://www.hanneslux.de/avr/divers/pm24/index.html ...
Hannes Lux wrote: >> wie ich schon geschrieben hab: die BCD-Zahl einfach mal 4 Stellen nach >> links shiften... > > Das ist da erstmal richtig. > > Trotzdem frage ich mich immer wieder, warum man ein Problem so > umständlich löst. An BASCOM kann es doch nicht liegen, denn auch mit > BASCOM kann man halbwegs effizient programmieren. beziehst du dich auf das ganze gepostete Programm oder auf das Shiften..weil was kürzeres wüsste ich in diesem Fall atm nicht...
> beziehst du dich auf das ganze gepostete Programm oder auf das > Shiften..weil was kürzeres wüsste ich in diesem Fall atm nicht... Ich beziehe mich auf das ganze Programm. Das Shiften ist in Ordnung, wenn man das Programm als gegeben voraussetzt. Allerdings ist für diesen Zweck der SWAP-Befehl (ASM) bedeutend effektiver. Ich weiß allerdings nicht, wie ich BASCOM dazu überreden sollte SWAP zu verwenden, besonders, da BASCOM zwingend alle Variablen im SRAM hält, SWAP aber auf Register wirkt. So tief bin ich in BASCOM nicht eingestiegen, ich habe es auch nicht vor, tiefer einzusteigen. Ich programmiere meine AVRs in ASM. Dieses BASCOM-Programm ist nur entstanden, weil ein guter Freund auch etwas umständlich (vom Algorithmus her) programmiert hatte und ich ihm zeigen wollte, dass das Programm mit anderen Algorithmen nur die Hälfte des Tiny24 belegt, während Seines nicht mehr in den Tiny24 hineinpasste und einen Tiny44 brauchte. Die ASM-Version belegt aber weniger als 25% des Tiny24-Flash (genauen Wert vergessen) bei höherem Funktionsumfang. ...
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.