timer interrupt atmega128a

OP #2560848
Lesenswert?

Moin!

Wieso habe ich auf PC0 UND PC1 ein Rechtecksignal?
Der Atmega läuft mit 3,6864MHz, erhaltene Impulsdauer momentan 30µs.
Sieht irgendjemand einen Fehler, der auf so ein Verhalten hinweist?
Gruß,
wastlB
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
int main(void)
5
{
6
DDRC |= (1<<PC1)|(1<<PC0);
7
PINC |= (1<<PC1)|(0<<PC0);
8

9
TCCR0 |= (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(0<<CS01)|(1<<CS00);
10
TIMSK |= (1<<OCIE0);
11
TIFR |= (1<<OCF0);
12
OCR0 = 56;
13
sei(); 
14
while(1)
15
{}
16

17
return 0;
18
}
19

20
ISR(TIMER0_COMP_vect)
21
{
22
PORTC ^= ~(1<<PC1);
23
}
#2560882
Lesenswert?

Die Zeiten stimmen zwar beim Nachrechnen mit dem überein, was sie sein 
sollten. Nichts desto trotz:

Du hast aber schon die M103 Fuse gelöscht?
Ansonsten macht den 128-er beim ersten auftretenden Interrupt einen 
restart.
Was dein beobachtetes Verhalten ganz zwanglos erklären würde.
OP #2560888
Lesenswert?

habe jetzt PORTC |=(1<<PC0) stehen, ändert aber leider nichts am 
verhalten.
zur anwendung: ich werde mehrere ventile parallel schalten müssen, 
deshalb kommt nur eine timeranwendung in frage. der restliche code ist 
komplexer (es müssen auch tasten abgefragt werden, ein LCD beschrieben 
werden...) nur der timer macht mir hier eben sorgen.
gibt es irgendwelche Fuses die dafür verantwortlich sein könnten?
die schaltung an sich ist auf einer professionell gefertigten platine 
drauf, kurzschlüsse zwischen den pins habe ich ausgeschlossen 
(multimeter).

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