Hallo,
ich hab gerade ein Programm geschrieben wo ich jetzt aber immer nur den
PA2 benutzen kann jedoch wollt ich wenn ich in der Funktion Pin 1
schreib den PA1 haben und bei Pin 5, PA5. Jedoch hab ich da bestimmt
einen Fehler und ich weiß nicht welchen da ich mich mit der Sprache von
AVR-Studio auch nicht so ganz auskenn.
Ich hoff ihr könnts mir hierbei helfen.
unsigned int ADCA_Conversion(ADC_CH_t *Channel, char Pin)
{
Channel->CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc; //Single Ended Mode
einstellen
Channel->MUXCTRL = (Pin << 3); //Pin ausw�hlen
Channel->CTRL |= ADC_CH_START_bm; //Messung starten und
Input-Mode auf Singleended stellen
while(!Channel->INTFLAGS);
return Channel->RES; //Inhalt des Datenregisters
auslesen
}
Sebastian schrieb:> unsigned int ADCA_Conversion(ADC_CH_t *Channel, char Pin)> {> Channel->CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;> Channel->MUXCTRL = (Pin << 3);>> Channel->CTRL |= ADC_CH_START_bm;> while(!Channel->INTFLAGS);> return Channel->RES;> }
sorry hab jetzt eine besser version ohne den Kommentaren so kann mans
leichter lesen.
Okay,
1.: Was ist jetzt eigentlich Deine Frage?
2.: Das ist kein vollständiges Programm. Woher sollen wir wissen, was z.
B. ADC_CH_t ist?
3.: Die "Sprache von AVR-Studio" ist bei mir Englisch. Bei Dir könnte es
evtl. Deutsch sein - das sollte aber recht offensichtlich sein...
Ehe ich dich jetzt frage, für welchen µC das ganze überhaupt sein soll:
> Channel->MUXCTRL = (Pin << 3);
WIe ist denn, laut Datenblatt, der Zusammenhang zwischen dem, was man in
das MUXCTRL Register schreiben muss und dem Pin an dem gemessen wird?
(Und was soll das <<3 da drinnen? Das sieht schon mal nicht richtig aus)
Karl Heinz Buchegger schrieb:> Ehe ich dich jetzt frage, für welchen µC das ganze überhaupt sein soll:>>> Channel->MUXCTRL = (Pin << 3);>> WIe ist denn, laut Datenblatt, der Zusammenhang zwischen dem, was man in> das MUXCTRL Register schreiben muss und dem Pin an dem gemessen wird?>> (Und was soll das <<3 da drinnen? Das sieht schon mal nicht richtig aus)
Ist auf einem ATXmega 128a1, das Board ist selbst entwickelt.
Also ganz ehrlich das mit dem <<3 weiß ich nicht was es bedeutet weil
ich mit Atmel erst beim einstieg bin, mir das ein Freund gesagt hat, und
bei PIC hab ich das vorher noch nie gesehen.
Hab das aber schon ein paar mal so gemacht und hat funktioniert,
vielleicht war es aber auch bis jetzt immer nur zufall.
Ich hoff ich darf hier einen link vom Datenblatt posten und dann die
Seitenzahl wo der ADC beginnt.
http://www.atmel.com/Images/doc8077.pdf
Seite 296
Sebastian schrieb:> Hab das aber schon ein paar mal so gemacht und hat funktioniert,> vielleicht war es aber auch bis jetzt immer nur zufall.
Kann sein.
Denn 0 mal 8 ergibt wieder 0.
ALso: Wenn du Pin 1 haben willst, was musst du ins MUXCTRL Register
schreiben. Das ist doch nicht so schwer rauszufinden mit dem Datenblatt.
WEnn dir <<3 nichts sagt, dann wirf es weg und fang von vorne an
Channel->MUXCTRL = .....
was muss an die Stelle der Punkte treten, damit du einen bestimmten Pin
einstellst. Diese Frage lässt sich ganz sicher mit dem Datenblatt bzw.
der Beschreibung der ADC_CH_t Struktur beantworten.
also binär wär zum Beispiel für:
PA1 0b0001 0000
PA2 0b0001 1000
laut seite 304
Aber wie kann ich das jetzt machen damit ich das einfach in der Funktion
deklarieren kann immer?
Sebastian schrieb:> also binär wär zum Beispiel für:> PA1 0b0001 0000> PA2 0b0001 1000>> laut seite 304
Jau. Hab ich auch gesehen. Das ist also einfach die Pinnummer um 3
Stellen nach links verschoben. Das erklärt die <<3, denn das ist dann
genau diese Operation.
So gesehen müsste das eigentlich stimmen.
Karl Heinz Buchegger schrieb:> Sebastian schrieb:>> also binär wär zum Beispiel für:>> PA1 0b0001 0000>> PA2 0b0001 1000>>>> laut seite 304>>> Jau. Hab ich auch gesehen. Das ist also einfach die Pinnummer um 3> Stellen nach links verschoben. Das erklärt die <<3, denn das ist dann> genau diese Operation.>> So gesehen müsste das eigentlich stimmen.
das heißt wenn ich oben 2 hineinschreib, verschiebt er das um 3stellen
und schreibt 0b0001 0000??
also wenn das tatsächlich so ist, dann stimmt der Teil von Code. Aber
was kann es sonst noch sein?? Das ich immer nur den selben Pin hab??
Nur mal eine Zwischenfrage!
Wie lang ist eigentlich die Liste der Fehlermeldungen?
Nicht nur bei:
ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc; //Unsigned Mode / 8 Bit
und
Channel->MUXCTRL = (Pin << 3); //Pin ausw�hlen
klappt’s mir die Zehennägel hoch.