AVR Zugriff auf ADC

Ich suche C-Code für den Zugriff auf die onchip-ADCs des AVR. Ich hätte erwartet, solchen in der avr-libcc zu finden-- weit gefehlt!!

Aber wo sonst?

Gruss

Robert

-- 'Vom Standpunkt eines Beamtenrechtlers aus betrachtet ist der Tod die schärfstwirkenste aller bekannten, langfristig wirkenden Formen der vollständigen Dienstunfähigkeit.' aus: Kommentar zum Beamtenrecht.

Reply to
R.Freitag
Loading thread data ...

In deinen grauen Zellen? Die 2-3 Zeilen wirst du doch wohl selber hinbekommen.

Olaf

Reply to
Olaf Kaluza

Hi!

Was in die einzelnen Register kommt, musst Du schon selbst verstanden haben. Ansonsten, inclusive sleep-while-conversion:

#include #include #include

void AD_Init(void) { MCUCR = ...; ADCSRA = ...; }

unsigned int AD_Get(unsigned char channel) { ADMUX = channel | ...; sei(); sbi(ADCSRA, ADSC); // start conversion asm volatile("sleep\n\t"::); return(ADC); }

SIGNAL (SIG_ADC) { }

Der ADC schickt die CPU während der Wandlung in den Schlaf und weckt sie danach wieder auf. Der "leere" Interrupt ist dazu da, daß die CPU nach dem "wach auf, der ADC ist fertig"-Interrupt nicht in die Pampa springt.

Gruß, Michael.

Reply to
Michael Eggert

Michael Eggert schrieb:

sbi is nich mehr. Standard-C: ADCSRA |= _BV(ADSC).

#include

set_sleep_mode(SLEEP_MODE_ADC); ... sleep_mode();

#include

EMPTY_INTERRUPT(ADC_vect);

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

Hi!

Hab ich beim copy&paste übersehen, war ein altes Projekt.

Aahja.

Den kannte ich noch nicht, danke!

Gruß, Michael.

Reply to
Michael Eggert

Michael Eggert schrieb:

Ich merke gerade, dass ich den zu voreilig aus der aktuellen (to become avr-libc 1.4.0) Doku cut&pasted habe. Für avr-libc 1.2.6 heißt das natürlich

EMPTY_INTERRUPT(SIG_ADC);

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

Und was ist, wenn waehrend des Sleeps irgendwas anderes den AVR aufweckt? Dann faehrt er nach dem sleep fort, liest die ADC Register aus die noch keinen gueltigen Inhalt enthalten und liefert irgendeinen Mist zurueck...

cu,

Steffen

Reply to
Steffen Koepf

Hi!

Da fällt mir ein, hast Du eine Idee, wann das neue WinAVR-Paket rauskommt?

Gruß, Michael.

Reply to
Michael Eggert

Hi!

Stümmpt, kam in meiner Anwendung nur nicht vor. Also noch das AD Interrupt Flag Bit abfragen...

Gruß, Michael.

Reply to
Michael Eggert

Ich mach mal die Ingrid...:-(

ich habe beim Posten dieser msg eigentlich als Antwort eine Lib haben wollen, in der sowas drinsteht, natürlich kann ich mir das alles selbst programmieren, aber das kann ich bei Stzrings usw. ja auch. Mittlerweile bin ich fündig geworden,

formatting link
enthält weitere Infos.

Grüsse

Robert

--
'Vom Standpunkt eines Beamtenrechtlers aus betrachtet ist der Tod die 
schärfstwirkenste aller bekannten, langfristig wirkenden Formen der 
vollständigen Dienstunfähigkeit.'
aus: Kommentar zum Beamtenrecht.
Reply to
R.Freitag

Oder in der Interrupt-Routine ein Flag setzen und dieses Abfragen:

while(c_adc_complete == 0) { asm volatile ("sleep"); }

SIGNAL (SIG_ADC) { c_adc_complete = 1; /* Set ready flag */

}

cu,

Steffen

Reply to
Steffen Koepf

Hast du mal da nachgelesen:

formatting link

Da steht doch (fast) alles an Grundlagen drin, mit Codebeispielen

MfG Daniel

Reply to
Daniel Tschetmotor

Michael Eggert schrieb:

Musst du Eric Weddington fragen... Er hat kürzlich den Job gewechselt und ist darauf hin umgezogen, das hat natürlich gut Zeit geschluckt.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

"R.Freitag" schrieb:

Da hier von 3 Zeilen Code bis zum komplett interruptgesteuerten System, das nach jeder Messung den Kanal umschaltet und neu misst alles denkbar ist, ist die customization wohl das größte Problem. Genau darin unterscheidet sich eben die Aufgabe drastisch von einer einfachen String-Verarbeitung.

avrlib, ja, die ist bekannt. Wenn die Lizenz für deinen Einsatzzweck OK ist und die restlichen Randbedingungen auch, warum nicht? Die hat einen ganz guten Ruf und auch noch andere nützliche Dinge.

Aber wie geschrieben, im einfachsten Falls sind es 3 Zeilen Code, da braucht man keine Bibliothek dafür (einschalten, warten, auslesen).

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.