Forum: Mikrocontroller und Digitale Elektronik ATmega1284P - Timer liefert nur Nadelimpulse!


von Adam P. (adamap)


Angehängte Dateien:

Lesenswert?

hallo zusammen,

ich habe vor 1 woche folgenden code auf einem atmega32 erstellt,
dort funktioniert der timer einwandfrei. ich erhalte ein rechtecksignal 
am port, welchen ich testweise in der ISR umschalte.
(quarz = 16mhz)
1
#define CLK_PRELOAD_10MS    2499L
2
...
3
TCCR1A = 0;
4
TCCR1B |= (1<<WGM12) | (1<<CS11) | (1<<CS10);   //CTC Mode, clk/64
5
OCR1A = CLK_PRELOAD_10MS;
6
TIMSK |= (1<<OCIE1A);

gestern habe ich nun ein atmega1284p bekommen und wollte diesen für das 
weitere projekt verwenden. ich habe folgende zeile geändert:
1
TIMSK1 |= (1<<OCIE1A);

problem ist, dass ich kein rechtecksignal erhalte, sondern nur einen 
kurzen nadelimpuls...kann mir das nicht erklären und meine einstellungen 
stimmen soweit mit dem datenblatt überein. ich habe mal ein bild vom 
scope mit angehangen (zeit: 2ms/DIV).

vielen dank schonmal :)
gruß
adam

von Avr N. (balze)


Lesenswert?

Hallo Adam,

das was Du uns von Deinem Code zeigst , sieht mMn richtig aus.
Allerdings ist das ja nur ein kleiner Teil.

Dein Oszi Bild sieht mMn etwas seltsam aus.
Wo ist Dein Strahl in den 4ms vor dem Peak?
Jedenfalls nicht (dauerhaft) auf 0, oder?

Bist Du sicher am richtigen (richtig konfigurierten) Pin zu messen?

MfG,

Balze aka AVR Noob

von Adam P. (adamap)


Lesenswert?

also die "durchgezogene" (untere) linie ist GND. und dann hat er halt 
immer wenn der timer compare meldet ein nadelimpuls.
anscheinend muss das etwas mit dem mega1284p zu tun haben, den auf einem 
32er läufts ja ohne probleme...oder ich übersehe da etwas, evtl. fuses?! 
was ich aber eher weniger glaube. mein code ist nicht viel. in der main 
habe ich halt die o.g. initialisierung und dann noch die ISR:
1
ISR(TIMER1_COMPA_vect)
2
{
3
  PORTD = ~PIND;
4
}

habe auch schon mal versucht den teiler und den compare wert zu ändern, 
dann wirds aber nur noch schlimmer. sprich: ich erhalte dann so etwas 
wie ein rechtecksignal, jedoch 2 stück, da wo der eine die fallende 
flanke hat, hat der andere die steigende - was ich mir erst recht nicht 
erklären kann. letzte möglichkeit wäre, dass der µc defekt ist?!

---
nachtrag:
kann es evtl. an der externen beschaltung (spannungsversorgung) liegen, 
dass der 128er andere werte für kondensatoren braucht oder ähnliches?

von Michael A. (Gast)


Lesenswert?

Adam P. schrieb:
> PORTD = ~PIND;

Wie ist denn dein PORTD konfiguriert und wie ist die Beschaltung von dem 
PortPin, den du dir ansiehst?
Warum liest du den Pin-Zustand ein und nicht das Port-Register?

von Adam P. (adamap)


Lesenswert?

DDRD = 0xff;

es handelt sich um das avr entwicklungsboard von pollin.
am port hängt eine led über vorwiderstand. die schaltung ist in ordnung, 
wie gesagt mit einem anderen µ¢ läufts.
ich habe das so gelöst, weil ich den ausgang einfach nur immer 
umschalten will, hätte ich auch anders lösen können...aber das soll hier 
nicht das problem sein?!

von Avr N. (balze)


Angehängte Dateien:

Lesenswert?

Also fuer mich sieht es eben nicht so aus, als waere Dein Signal 
dauerhaft auf 0.
Oder ist Dein Oszi kaputt?

Bei den (Roehren-) Oszis die ich kenne, behaelt der Elektronenstrahl 
seine Intensitaet, wenn sich das Signal nicht aendert.
Das sieht bei Dir anders aus.

(Wenn Du scheinbar zwei Signale mit Deinem Oszi angezeigt bekommst, (bei 
einem Einkanal-Oszi) hast Du ein schnell wechselndes.)

Dreh mal die Zeitbasis runter und sieh Dir das Signal mal genaueer an.

MfG,

Balze

von Adam P. (adamap)


Lesenswert?

OK :-D

das ist schon so peinlich, dass ich mich am liebsten in die ecke 
verkriechen wollen würde!

hab den "fehler" gefunden.
da ich im projekt noch meine USART lib hatte und die mitkompiliert 
wurde, ich aber testweise PORTD abwechselnd von 0x00 auf 0xff geschalten 
habe, waren auch die pins TXD RXD betroffen.
habe die lib entfernt und siehe da -> schönes rechtecksignal.
zusätzlich kam noch hinzu, dass die USART lib noch nicht ganz fehlerfrei 
war.

aber ich danke euch allen :)

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
Noch kein Account? Hier anmelden.