ATmega168 und PWM Problem

Gast #557734
Lesenswert?

Hi,
ich experementiere seit einer Weile mit AVRs und möchte demnächst ein 
X-Ufo selbst basteln.
Dabei komme ich nicht um PWM herum. Grundsätzlich habe ich durch 
Ausprobieren einiges hinbekommen wie USART und ADC.
Jedoch habe ich ein Problem mit PWM und Timer0.
In Foren habe ich mehrere Beispiele gefunden, diese funktionieren aber 
auch nicht.
Hier mein aktueller Code:
1
void initPWM(void)
2
{
3
  DDRB = 0xFF;
4
  DDRD = 0xFF;
5

6
  TCCR0A = (1<<WGM00)|(1<<COM0A1)|(1<<COM0B1); // PWM, phase correct
7
  TCCR0B =  (1<<CS01) |(1<<CS00); // enable counter
8

9
  OCR0A = 0x4F;// witdh
10
  OCR0B = 0xCF;
11

12
  TCCR2A = (1<<WGM20)|(1<<COM2A1)|(1<<COM2B1); // PWM, phase correct
13
  TCCR2B =  (1<<CS21) |(1<<CS20); //enable counter
14

15
  OCR2A = 0x4F;// witdh
16
  OCR2B = 0xCF;
17
}

Während die Spannungen hier bei Timer 2 (und Timer 1 in vorherigen 
Tests) alle richtig waren, funktioniert Timer 0 nicht wie er soll bzw an 
den beiden Ports (PD3 und PB3) messe ich die gleiche Spannung von ca. 
1,6 V .
(An OCR2B / PD3 messe ich beispielsweise rund 4 V, nach ausrechnen 
0xCF/256*5V kriege ich 4,04V raus, was also stimmt; genauso mit OCR2A / 
PB3 mit ca 1,5 V)

Ich habe daraufhin schon alle verschiedenen Bit-Kombinationen nach dem 
Datenblatt versucht, aber es hat nichts gebracht.

Was ich zudem recht merkwürdig finde:
Wenn ich Timer0 mit PMW aktiviere, wird der AVR nach kurzer Zeit 
vergleichsweise warm.
Bei Timer2 und Timer1 bleibt er immer kühl.

Hat jemand eine Idee, woran es liegen könnte ?

Danke im voraus
Alex
Gast #557789
Lesenswert?

Ja, ich war mit den Gedanken schon bei Timer 2;)
Ich meinte auch PD5 und PD6. An denen messe ich Spannungen um die 1,6 V.

PD3 und PB3 funktionieren mit Timer2 einwandfrei.

Der AVR erwärmt sich nur, wenn diese Zeilen stehen:
1
  TCCR0A = (1<<WGM00)|(1<<COM0A1)|(1<<COM0B1); // PWM, phase correct
2
  TCCR0B =  (1<<CS01) |(1<<CS00); // enable counter

Wenn ich diese auskommentiere, neu kompiliere und brenne bleibt er kühl 
und Timer 2 funktioniert weiterhin.
Gast #557810
Lesenswert?

Nein, also PD5 und PD6 sind nicht miteinander verbunden und an keinem 
Port ist was angeschlossen.
Ich verwende ein myAVR Board 2.06 , das ich selbst zusammengebaut habe ( 
http://www.myavr.de/shop/artikel.php?artID=41 ) und messe die Spannungen 
an den Kontakten unten.

Ich prüfe nochmals die Verbindungen, aber ich habe soweit ich es sehe 
alles richtig gelötet.
Gast #557819
Lesenswert?

Ok, ich hab das Problem.
Du hattest Recht :-D .

Beim Löten habe ich  da recht viel Lötzinn verwendet und .. beim .. 
Einsetzen des µCs habe ich immer recht stark auf die Platine gedrückt, 
damit der Chip auch wirklich fest sitzt, dabei hat sich das Lötzinn 
verformt und die PORTs D5 und D6 waren tatsächlich kurzgeschlossen.

Auf der Steckplatine hat es eben auch funktioniert.
Der Code ist also auch ok.

Wegen dem Kurzschluss ist der AVR wohl auch warm geworden ...

Vielen Dank senex24 für deine Hilfe :-)

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