Atmega328 Pin toggeln geht nicht

Gast #4718645
Lesenswert?
• ▲
▼
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ß
Gast #4718690
Lesenswert?
• ▲
▼
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 ?
#4721552
Lesenswert?
• ▲
▼
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();
#4721638
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren