ATmega8535 AD WANDLER Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
|
|
|
BID = 268291
MaleYAK Gerade angekommen
Beiträge: 6
|
|
Hallo zusammen,
Ich versuche seit einiger Zeit, den AD Wandler zum Laufen zu bekommen.
Ein einem Pin des A Ports ist ein Drucksensor angeschlossen, sobald ich den Atmel starte wird nur einmal eine AD Konvertierung durchgeführt, obwohl die routine sich in einer Schleife befindet. Ich muss reset ausführen damit die Konvertierung erneut ausgeführt wird also wieder nur einmal. Es ist so als ob der AD Wandler nach der ersten konvertierung abgeschaltet wird. Die Flags sind richtig gesetzt... Der MC ist in Ordnung, da er andere aufgaben weiter bearbeitet.
ich benutze folgenden Code.
int read_adc(char channel)
{
int result = 0;
DDRA &= ~ (1<<channel); // Pin als input
PORTA &= ~ (1<<channel); // Alle Pullups aus.
ADMUX = 0xC0; // interne Refernzspannung, rechts Ausrichtung
ADMUX |= channel; // Kanal wählen
asm("nop"); //kurze Pause
ADCSRA=(1<<ADPS2)+(1<<ADPS1)+(1<<ADPS0)+(1<<ADEN); //Prescale Faktor, ADC an
asm("nop");
ADCSRA |= (1 << ADSC); // Beginne mit der Konvertierung
while ( (ADCSRA & (1<<ADSC)) != 0){} //Warten bis konvertierung beendet
asm("nop");
result= ADCL; // Ergebnis die letzten 8 BIT
return result;
}
Diese Funktion wird in einem Loop ausgeführt. Trotzdem wird der AD Wandler nur einmal eingeschaltet. Auch eine Löschung der Interrupts nach dieser funktion brachte keinen Erfolg.
Wo mache ich den Fehler??
Für jede Hilfe wäre ich Dankbar. |
|
BID = 268295
photonic Schreibmaschine
    
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
|
Zitat :
|
Der MC ist in Ordnung, da er andere aufgaben weiter bearbeitet
|
Diese Annahme musst du vergessen. Es ist kein Problem einen Teil des Controllers kaputtzumachen ohen das etwas anderes davon beeinträchtigt wird. Diesen Fall hatte ich schon zwei mal, jedoch noch nicht mit dem ADC. Funktioniert er denn im auto-trigger-mode?
Ich kann auf den ersten blick auch nichts Falsches erkennen, aber wenn du 100% sicher bist das alles stimmt, probiere mal einen frischen Controller wenn du gerade einen da hast.
|
|
BID = 268297
MaleYAK Gerade angekommen
Beiträge: 6
|
Danke Hat sich erledigt.
Der Fehler lag an dem Auslesen des Registers.
Der Register ADCH und ADCL muss komplett ausgelesen werden, damit er beim nächsten mal beschrieben werden kann.
Liest man nur ein Teil aus, bleibt er konstant auf dem alten wert und ein neuer wert kann nicht in den register geschoben werden.
Lösung:
...
result = ADCW;
...
jetzt Läuft der MC einwandfrei.
Irgendwie habe ich das in dem Datenblatt nicht gefunden...
Wieso das so ist keine Ahnung. Man geht davon aus das der Register ständig neu beschrieben wird nach einer Konvertierung.
Nachmals Danke.
|
BID = 268482
photonic Schreibmaschine
    
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
ich wäre auch davon ausgegangen und hätte den selben Fehler gemacht wenn mich nur die letzten 8 bit interessiert hätten. Im Datenblatt steht nicht wirklich etwas davon. Wahrscheinlich gehen die davon aus dass man sowieso immer die Daten aus dem ganzen Register ausliest.
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 7 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 192385194 Heute : 1071 Gestern : 4548 Online : 673 15.7.2026 7:14 1 Besucher in den letzten 60 Sekunden alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0528891086578
|