Forum: Compiler & IDEs ATMega16 PWM - externe clock


von der_hier (Gast)


Lesenswert?

Hallo zusammen,

ich versuche momentan eine Manchester-codierte Nachricht über PWM 
abzugeben. ich nutze einen ATMega16 mit externen 8MHz Oszillator. Das 
Signal auf das ich die Nachricht aufbringen möchte läuft mit 125 KHz. 
Ich nutze Timer/Counter1 (16 Bit)da er mir sowohl Fast PWM mit Top OCR1A 
bietet wie auch ansteuerung über externe clock (T1). Ein Halbbit des 
Manchestercodes soll 32 125KHz Zyklen (logischerweise ein Bit 64 Zyklen) 
lang sein.

Probleme: 1. Wenn ich OCR1B nach der Initialisierung von Timer1 setzen 
will funktioniert es nicht (bleibt 0)
2. Wenn ich es vorher setze wird der Ausgang fürs PWM Signal nicht 
gesetzt (PD4)

hier Programmauszug :
1
/* includes sind alle da hab nur leider das programm grad nicht hier, deswegen gibts nur die wichtigsten auszüge*/
2
3
uint8_t nachricht[63]; 
4
/* an jeder stelle wird ein bit gespeichert hab mir den programmteil grad gespart*/
5
6
uint8_t k=0;
7
8
ISR (TIMER1_OVF_vect){
9
  
10
  if(nachricht[k]) {TCCR1A |= (1<<COM1B0); } 
11
  else{ TCCR1A &= ~(1<<COM1B0); } 
12
  /* wenn das aktuelle bit 1 ist dann invertierend ansonsten nicht invertierend */
13
  k++;
14
  if (k==64){ k = 0; } 
15
}
16
17
void pwminit(){
18
  TCCR1A |= (1<<COM1B1) | (1<<WGM11) | (1<<WGM10) ;
19
  TCCR1B |=  (1<<WGM12) | (1<<WGM13) | (1<<CS10) | (1<<CS11) | (1<<CS12) ;
20
  // PWM mode 15, externe clock an T1, vorbereitung für compareausgabe
21
  TIMSK |= (1<<TOIE1); //Timer1 overflow ein
22
}
23
24
int main(){
25
  DDRD = 0xFF;
26
  OCR1A = 64-1; // PWM Zähler bis 63
27
  OCR1B = 32; // 50% PWM durch umschalten bei 32
28
 
29
  pwminit();
30
  
31
  sei();
32
  while (1){}
33
34
return 0;
35
}

Achso, falls interessant genutzt wird AVRstudio 4 und programmiert und 
gedebuggt via JTAG ICE.

von der_hier (Gast)


Lesenswert?

Hab den Fehler gefunden, war nichts Programmtechnisches sondern die 
beschaltung am PWM-Ausgang

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.