mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny13a ADC funktioniert nicht


Autor: dasrotemopped (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe mir mit dem ATTiny13a ein kleines Experimentierprojekt 
aufgesetzt. Am ATtiny habe ich mit dem Timer an PB0 eine LED mit PWM zum 
Blinken gebracht und kann die Blinkgeschwindigkeit über einen Taster 
IRQ-gesteuert an PB2 ändern. Funktioniert so weit auch wenn der Taster 
prellt und die Einstellung etwas unkomfortabel ist.
Habe mir aber gedacht, den ADC mit einem Poti (50k) an PB4 (ADC2) mit 
verschiedenen Spannungswerten zu füttern, die dann als neuer Wert für 
die Blinkgeschwindigkeit dienen, also am Poti drehen und die 
Blinkgeschwindigkeit ändert sich. Aber anscheindend wird nie eine AD 
Wandlung durchgeführt. Die ISR vom AD Wandler wird nie angesprungen ( 
hab zum Debuggen noch eine LED an PB1 angeschlossen, die beim IRQ vom 
Taster auch brav anzeigt, das die PCINT2-ISR aktiviert wurde.

Das Beispiel vom GCC-Tutorial habe ich an den ATtiny angepasst, macht 
aber auch keinen Unterschied. Wenn ich das "Conversion Complete" Flag in 
einer Schleife abfrage um dann erst das Programm nach erfolgtem 
Abschluss weiter laufen zu lassen macht der uC an den LEDs nix mehr.

Habe den Sourcecode in C vom AVRStudio hier bereitgelegt:
http://home.arcor.de/markus.horbach/dateien/Tiny_T...

Ich hoffe auf erleuchtende Tips,

Gruß,

dasrotemopped.

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo schaltest du denn den Interrupt für den ADC ein? Das hab ich nicht 
gefunden.

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
//ADCSRA = 0b0000.x000; #3 ADC Interrupt Enable

Das wird ja nie gesetzt, also auch kein Interrupt ausgelöst.

Grüße,

Peter

Autor: dasrotemopped (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der Datei adc.c in Zeile 48
ADCSRA |=  ( 1 << ADC);   // IRQ nach Conversion aufrufen
wird der IRQ aktiviert.

Gruß,

dasrotemopped.

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon ist eine Vorgehensweise wie

while(1){
[...]
adc_conv_start();
[...]
}

nicht gerade gut, man sollte vor dem Neustart schon warten, bis die 
vorherige Konvertierung fertig ist. Oder gleich den Freerunning-Mode 
verwenden.

Autor: dasrotemopped (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe viel Doku Text im Quellcode, damit ich nicht jedesmal durch das 
Datenblatt scrollen muss.

Gruß,

dasrotemopped.

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Bit zum Interrupt einschalten heißt ADIE, nicht ADC.

ADCSRA |=  ( 1 << ADIE);   // IRQ nach Conversion aufrufen

Autor: dasrotemopped (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das wars !! ADC nach ADIE geändert und das Poti ändert die 
Blinkfrequenz. Hab dabei auch gleich eine Kontrolle eingebaut, das eine 
neue AD Wandlung erst gestartet wird wenn die letzte Abgeschlossen ist.

Danke an alle !

Gruß,

dasrotemopped

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und loop sollte als volatile deklariert werden, weil es im Interrupt und 
Hauptprogramm verwendet wird.

Grüße,

Peter

Autor: dasrotemopped (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile hab ich auch noch eingefügt.
Habe den korrigierten Code auch hochgeladen.

Hmm, der Tiny ist erst zu 58% voll. Was kann ich jetzt noch einbauen ?

Danke noch mal an dich , Peter, für die prima Hilfe.

Gruß,

dasrotemopped.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.