Problem mit PWM - Tiny13

Gast #4407230
Lesenswert?
• ▲
▼
Guten Abend,

ich möchte mit einem tiny13 über einen Poti eine PWM erzeugen.
Der Poti wird an PB3 genschlossen und zwischen VCC und GND aufgespannt.
Soweit komme ich mit dem testen aber auch gar nicht.

Irgendetwas scheint mit dem PWM nicht zu stimmen. Ich habe testeshalber 
erstmal eine LED an PB1 angeschlossen. Und einen festen Wert an OCR0B 
übergeben.
Die LED leuchtet nicht.

Wenn ich die komplette main bis auf DDRB = 0xFF; PORTB = 0x00; 
auskommentiere, dann geht auch die LED an.

Obwohl ich das Datenblatt relativ gewissenhaft gelesen habe, hat sich 
ein Fehler eingeschlichen.
Die Datei ist trotz vieler Zeilenumbrüche lediglich 60 Zeilen lang und 
gut kommentiert. Ich hoffe, jemand von euch kann eben über die Datei 
fliegen?
Ich bin gerade etwas am verzweifeln.


http://pastebin.com/4z3993E6


Bester Gruß.
#4407301
Lesenswert?
• ▲
▼
Für irgendeinen sicher.
Andererseits muß man schon alt werden, um einen 1kHz-Pfeifer nicht mehr 
zu hören ;-)

Ob der (Gleichstrom?-)Motor deine PWM mag, sagt er u.A. über seine 
Temperatur. Und falls nicht, hat man es mit deutlich mehr kHz einfacher 
ein LC-Filter davor zu bauen. Ich würde den Prescaler mal von 1024 auf 
64 oder sogar 8 ändern. Dann pfeift nix mehr.
Gast #4407354
Lesenswert?
• ▲
▼
Danke für die Info. Ich versuche es mal mit einem anderen Prescaler.

Aktuell habe ich noch Probleme mit dem ADC. Scheinbar funktioniert die 
ISR doch nicht wie gedacht.

Ich muss mal UART implementieren, damit ich vernünftig debuggen kann ://
Mit nur einer LED ist irgendwie doof.
Gast #4407562
Lesenswert?
• ▲
▼
In der setup() richte ich den ADC ein und in der ISR werden die Werte 
aufaddiert. Irgendwie scheint aber in der setup() etwas falsch zu sein.
Über eine Schleife in der Main geht es jedenfalls. Jedoch nicht im Free 
Running. Sieht da jemand einen Fehler?
1
static uint32_t sum;
2

3
ISR( ADC_vect )
4
{
5
  static uint8_t  f;
6
  sum += ADC;
7
  
8
  f++;
9

10
  if(f == 0)
11
  {
12
    // tue etwas mit dem oversampling
13
    sum = 0;
14
  }
15
}
16

17
void setup()
18
{
19
  ADMUX |= (1 << MUX1) | (1 << MUX0); // PB3
20

21
  ADCSRA |= (1 << ADPS1) | (1 << ADPS0);
22
  ADCSRA |= (1 << ADIF) | (1 << ADIE); // Interrupt enable
23
  ADCSRA |= (1 << ADATE);
24
  
25
  ADCSRA |= (1 << ADEN); // ADC enable
26
  
27
  ADCSRA |= (1 << ADSC); // ADC Start Conversion
28
  // Ab hier sollte das Free Running laufen und die ADC ISR aufrufen
29
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.