Hallo, ich teste gerade mit AVRStudio den Simulator für den ATMega16. Ich möchte gerne den Counter 0 verwenden. Dieser soll die Impulse am Eingang PortB Pin0 zählen (PB0). Soweit ich das Manual verstanden habe, sollte TCCRO mit 0x00 als Counter im "Normal Mode" funktionieren. Also folglich toggle ich PB0 softwaremäßig, aber der Zähler zählt nicht: .include "m16def.inc" .def null = r16 .def temp = r17 ; Initialisierung vom Counter0 ldi NULL,0x00 out TCCR0,NULL out TCNT0,NULL ldi temp,0x00 out TCCR0,temp loop: ldi temp,0x00 out portb,temp ldi temp,0x01 out portb,temp rjmp loop Geht das nicht im Simulator, oder ist die Initialisierung vom Counter 0 einfach Quatsch??? Der ATMega16 hat doch 3 Timer/Counter: Eingang für den Counter 0 -> T0 auf PB0 Eingang für den Counter 1 -> T1 auf PB1 Kann mir einer sagen, wo der Eingang für Counter 2 ist, sprich T2? Schon mal Danke Gruss Marc
auf jeden Fall ist die Initialisierung von TCCR0 falsch, schreibst du da "0" rein, bleibt der Zähler stehen. Für externes Zählen muss 0x06 (falling edge) oder 0x07 (rising edge) da stehen. Ob das überhaupt klappt, wenn du den Pin per Software toggelst, kann ich dir so nicht sagen (macht auch keinen Sinn, kannst ja gleich einen reinen Softwarezähler nehmen).
Hallo, ich habe die Initialisierung von TCCR0 mit 0x06 schon ausprobiert, funktioniert aber auch nicht. Mit dem Toggeln per Software ist nur ein Test, daß Ganze dient später dazu Inkremente von einem Reflexkoppler aufzunehmen und anschließend eine Regelung für eine Positionierung durchzuführen. Da für mich ziemlich viel Neuland dabei ist, wollte ich es eben mal simulieren. Eventuell muß ich dann eben auch den Counter simulieren... Gruss Marc
also vom Portschaltbild her sollte es funktionieren, da der entsprechende Zählereingang direkt am Pin liegt, sollte dem Zähler also wurscht sein, ob der Pin von "innen" oder von "aussen" getoggelt wird. Du hast aber vergessen, den Port auch als Ausgang zu schalten (sbi DDRx.x), mit deinem Programm erscheinen die Ausgaben nicht am Pin.
Das war es, nachfolgendes Programm funktioniert auch im Simulator. Wenn man allerdings den PB0 als Eingang schaltet (so wird es später mal gebraucht), dann läuft der Counter nicht hoch -- ist aber irgendwie logisch. Danke crazy horse. Gruss Marc -- .include "m16def.inc" .def null = r16 .def temp = r17 ; Initialisierung vom Counter0 ldi NULL,0x00 out TCCR0,NULL out TCNT0,NULL ldi temp,0x06 out TCCR0,temp ; Initialisierung des PB0 als Ausgang ldi temp, 0x01 out DDRB, temp loop: ldi temp,0x00 out portb,temp ldi temp,0x01 out portb,temp rjmp loop
So, jetzt funktioniert es auch als Eingang !!! Der Unterschied liegt darin, daß nicht der PortB getoggelt wird, sondern der PinB. Nochmal die Änderung, dann ist aber gut... .include "m16def.inc" .def null = r16 .def temp = r17 ; Initialisierung vom Counter0 ldi NULL,0x00 out TCCR0,NULL out TCNT0,NULL ldi temp,0x06 out TCCR0,temp ; Initialisierung des PB0 als Eingang ldi temp, 0x00 out DDRB, temp loop: ldi temp,0x00 out pinb,temp ldi temp,0x01 out pinb,temp rjmp loop
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.