Hallo liebe Programmiergemeinde, ich hab da wiedermal ne frage! Nachdem ich nun weis das man das Register TCNT0 beschreiben und lesen kann bin ich auf neue Probleme gestoßen! Hier mal der Quellcode nur der Loop-Teil der verhergehende rest ist mir ja klar, los gehts : loop: wdr rjmp LED1 Led1: ldi r16,0b00000101 ldi r17, TCNT0 cpse r17,R16 rjmp loop sbi PORTD,0 rjmp loop onTCO: cli ldi r16,0b00000000 out PORTD,r16 sei reti Kurzbeschreibung was das Programm machen soll! 1. einen Timer von 0-255 zählen lassen, 2. im register R16 soll ein Vergleichswert stehen der dann mit dem Zählerregister TCNT0 verglichen wird und bei gleichheit die LED einschaltet die bis zum Overflow an ist, aber bei ungleich wieder zur Mainloop springt und solange den wert vergleicht bis die LED an ist. 3. Bei overflow sollen alle Leds zurück gesetzt und von vorne anfangen werden. Haut das hin wie ich mir das so gedacht habe oder hauts net hin, wenn nicht was kann man besser machen! (Programm läuft net bei mir!) Danke! MFG Steven
Also du hast ja ziemlich... "gewöhnungsbedürftigen" Code produziert. Also:
1 | loop: wdr |
2 | rjmp LED1 ;Was soll dieser Sprung? |
3 | |
4 | Led1: ldi r16,0b00000101 |
5 | ldi r17, TCNT0 |
6 | cpse r17,R16 |
7 | rjmp loop |
8 | sbi PORTD,0 |
9 | rjmp loop |
10 | |
11 | onTCO: cli ;Der ganze Code hier wird nie ausgeführt, |
12 | ldi r16,0b00000000 ;da du in jedem Fall wieder zu "loop" springst |
13 | out PORTD,r16 |
14 | sei |
15 | reti |
Ausserdem solltest du für solches Zeugs eher den Interrupt verwenden (Wenn du denn noch eine Compare-Einheit frei hast). Ansonsten vielleicht eher so: (Alles ungetestet)
1 | mainloop: |
2 | ldi r16, 0b00000101 |
3 | in r17, TCNT0 |
4 | cp r17, r16 |
5 | brsh LED_On |
6 | ;LED aus |
7 | cbi PORTD, 0 |
8 | rjmp mainloop |
9 | LED_On: |
10 | sbi PORTD, 0 |
11 | rjmp mainloop |
Erklärung: Deine Bedingung für die LED kannste auch umschreiben: "Wenn TCNT0 grösser oder gleich 0b00000101 ist, dann soll die LED eingeschaltet sein, ansonsten nicht". Das sollte mein Code machen.
Ja ist gewöhnungsbedürftig geb ich zu man könnte ja auch noch sagen das ich blutiger anfänger bin! Wir behandeln in der Schule den Z80, es gibt zwar parallelen zu andere Mikrocontrollern, aber vom Syntax ist das ne ganz andere schreibweise und beides gleichzeitig lernen ist net einfach! Ich selber, brauche unteranderem viele verschiedene Codebeispiele um den Syntax richtig verstehen zu können! Danke erstmal werde ihn morgen mal ausprobieren! MFG
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.