Hallo, ich kann bei dem IC den Pin nur auf High aber nie wieder auf LOW setzen. #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main(void) { init(); DDRD = (1<<PD7); TCCR1B |= _BV(CS10); // Set up timer while(1) { if (TCNT1 >= 49999){ PORTD ^= PD7; TCNT1 = 0; // Reset timer value } } return 0; // never reached } Der Atmega läuft mit 8Mhz und ist fest mit einem Board verlötet. Gruß
:
Verschoben durch User
chris schrieb: > Chris schrieb: >> PORTD ^= PD7; > > --> > PORTD ^= (1<<PD7); Sry hab ich natürlich so getestet. Aber tut sich trotzdem nichts!
Chris schrieb: > chris schrieb: >> Chris schrieb: >>> PORTD ^= PD7; >> >> --> >> PORTD ^= (1<<PD7); > > Sry hab ich natürlich so getestet. Aber tut sich trotzdem nichts! Standard laufen die Atmegas alle auf internal clock ? Ich habe so eine Ahnung das es daran liegt! Wo setzt man die am besten/sinnvollsten wenn man ein Makefile zum erzeugen und brennen benutzt ?
wo setzt du denn den interrupt? -> TIMSK1 !!! und gibst ihn frei? -> SEI() !!! gruß toni
Toni55 schrieb: > wo setzt du denn den interrupt? -> TIMSK1 !!! > und gibst ihn frei? -> SEI() !!! Er startet einen Timer und fragt das Zählregister ab. Da braucht er keine Interrupts, auch wenn hier der CTC-Modus prädestiniert wäre, der macht der ganzen Kram in Hardware ohne auch nur 1% CPU Belastung ;) > Standard laufen die Atmegas alle auf internal clock ? Ich habe so eine > Ahnung das es daran liegt! Eher weniger, wichtig ist das er überhaupt läuft. Also an dem geposteten Code kann ich nichts falsches sehen. Was geschieht in
1 | init(); |
:
Bearbeitet durch User
Wenn ich mich nicht komplett verrechnet habe sollte die Led ca. 160 mal pro Sekunde toggeln. Das menschliche Auge ist allerdings ein wenig träge, weshalb das ein-ausschalten der Led's vermutlich nicht gesehen werden kann und als dauerhaftes leuchten wahrgenommen wird. Kannst ja mal versuchen den Prescaler zu erhöhen, CS11 für Prescale 8 statt wie momentan CS10 für Prescale 1.
:
Bearbeitet durch User
Ingo L. schrieb: > ... Da braucht er keine Interrupts ... < er includiert aber "#include <avr/interrupt.h>" daher dachte ich :-(
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.