Hallo zusammen,
ich wollte ebend auf meinem selbst gebauten Controllerboard, siehe Bild
Meinen schon vor Monaten auf den STK500 Board erstellten und
funktionsfähigen Code zum Laufen bringen.
Der Code lief damals auf einem Atmega8.
Jetzt habe ich nur einen einzigen Atmega32 und da zeigt der Code für den
Analogen Potiwert ständig nur 1023 an.
Habt ihr eine Idee woran das liegen könnte.
anbei auch der Code
Das merkwürdige ist, das wenn ich die Potispannung von beispielsweise
1,5V auf den PIN0 an PORT A lege ADMUX = 0x01; dann messe ich am
Eingangsport des ADC 0V, obwohl ich 1,5V anlege. die habe ich auch
vorher gemessen und die sind da.
im Eingangsmodus funktioniert der PORT A problemlos.
Ist der code nicht in Ordnung (bitteeinmal drüber schauen) oder der
Prozessor.
Viele GRüße und noch einen schönen Abend wünscht Matthias.
Hubert G. schrieb:> ADMUX = 0x01 ist ADC1 auf PORTA1
Hallo Hubert,
danke für den Tipp.
Ja, ich habe sogar alle PORT A Pins durchprobiert, kein Erfolg. PIN1
auf PORT A müßte das sein, =anschlussPIN40 vom dem Atmega32.
Habe mich wohl mißverständlich ausgedrückt, aber kein PIN von PORT A
funktioniert, leider.
Vielleicht noch eine Idee?
Ansonsten scheint der Code wohl in Ordnung zu sein, sonst hättest Du
bestimmt noch was gesagt.
Viele Grüße,
Matthias.
Hallo zusammen,
danke für Eure Hilfe.
anbei ein Foto von meinem Schaltplan.
selbst wenn ich mich um einen PIN vertuhen würde 39 anstatt 40. ich habe
ja alle PORT A pins auf masse gezogen und es hat sich nichts an der LCD
Ausgabe getan.
zur Sicherheit habe ich auch noch eine LED auf PRTD mit in dieser
Messschleife vom POIRTA blinken lassen, um sicher zu gehen, das diese
schleife überhaupt wiederholt abgearbeitet wird.
ich fahre jetzt schnell zu conrad und hole mir einen weiteren Chip
Atmega32 für 7,5€ :-( ist dort sehr teuer
muss jetzt schnell los.
kann aber von unterwegs jederzeit eure Mails lesen.
bis nachher
Hubert G. schrieb:> Ralf G. (ralg) schrieb:>> PORTA??>> Beim Mega32 ist der ADC auf PORTA, zumindest steht es in meinem> Datenblatt so.
Ja, hatte etwas nachlässig den Eröffnungsthread gelesen. Ich ging beim
'Tausch' von etwas pinkompatiblem aus :-(
Also:
ADMUX-Register sieht für mich auf den ersten Blick völlig anders aus.
Matthias H. schrieb:> anbei ein Foto von meinem Schaltplan.
Dacht ichs mir.
Du musst deine Referenz im ADMUX-Register z.B. auf AVcc legen.
Also das Bit REFS0 setzen.
Sonst fehlt dir eine Referenzspannung, gegen die du misst.
Hallo,
Ich habe mal eine 47 Spule verwendet, nachdem merkwürdiger Weise es mit
10 nicht funktioniert hat. Mag in deinem Fall besser funktionieren.
Gruß Jannis
Ich frag mich ja immer wieder, wozu es im Tutorial fertige getestete
Funktionen gibt, wenn sie dann keiner studiert, wie man die Dinge macht.
Oder gar, Gott bewahre, einfach die Funktionen aus dem Tut nimmt.
Floh schrieb:> Matthias H. schrieb:>> ADMUX = 0x01; // Kanal waehlen (ADC1) ??>> Falsch. Hier überschreibst du deine Referenzeinstellung.
In der while(1)
Genau das wird es sein, dann ist externe Referenz eingestellt und nach
dem diese 0V ist, ist jeder andere ADC-Wert 1023.
Guten Morgen zusammen,
ich betreibe meinen Atmega32 im free running mode und habe eine Frage
zur Kanalauswahl.
Ich habe es so verstanden, wenn man keienn Kanal wählen würde
ADMUX = 0x06; //Platinenpoti also nciht diese Zeile,
dann würde der AD Wandler nach und nach alle Kanäle abfragen.
Was ist, wenn ich diese Kanäle aktiviere, weil ich sie in meinem
Programm brauche
ADMUX |= 0x04; //Motorpoti
ADMUX |= 0x03; //shunt
ADMUX |= 0x06; //Platinenpoti
meines Wissens nach werden dann nur diese Kanäle im free running mode
durchlaufen, oder irre ich mich da?
jetzt habe ich aber eine Oversampling abfrageschleife so wie hier
result=0;
for(i=0; i<20;i++)
{
//ADCSRA |= (1<<ADATE);
while (!(ADCSRA & (1<<ADIF)));
result += ADCW;
}
result /=20;
dtostrf((double)result, 4,0, texte); lcd_gotopos(3,16);
lcd_writetexte(texte);
Meine eigentliche Frage lautet, ob in dieser Schleife jetzt nach und
nach alle 3!!! vorkonfigurierten ADC Kanäle abgefragt und ausgewertet
werden???
Ich möchte doch in dieser konkreten Schleife jetzt nur einen der drei
vorgewählten
ADMUX |= 0x04; //Motorpoti
ADMUX |= 0x03; //shunt
ADMUX |= 0x06; //Platinenpoti
Kanäle abfragen.
Muss ich dazu vor dieser SChleife zwei der drei Kanäle deaktivieren? Ich
denke ja, oder
Ich hoffe, ich konnte mein Anliegen verständlich rüber bringen.
Danke für die Hilfe im Vorraus,
Matthias.
Auch wenns jetzt nicht mit deinem eigentlichen Problem zu tun hat...
Hast du dir eigentlich beim Layouten mal darüber Gedanken gemacht wie du
deine Anschlussleitungen in die Schraubklemmen gesteckt bekommst?
http://www.mikrocontroller.net/attachment/118664/DSCF1935.jpg
Gruß,
Magnetus
Matthias H. schrieb:> ADMUX |= 0x04; //Motorpoti> ADMUX |= 0x03; //shunt> ADMUX |= 0x06; //Platinenpoti
Böse. Dein ADMUX sieht danach so aus:
ADMUX = 0x03 | 0x04 | 0x06 = 0x07;
Das willst du sicher nicht.
Meine Empfehlung, kapsle die komplette AD-Wandlung mit Einstellung des
Kanals in eine Funktion (wie z.B. im Tutorial vorgemacht).
Und dann benutze zum AD-Wandeln nur noch diese Funktion, ohne in den
Registern wild rumzuschreiben.
Übrigends gibt ADMUX immer den aktuellen Kanal an, da kann man nix
voreinstellen, was der ADC als nächstes machen soll.
:-)
Magnus Müller schrieb:> Auch wenns jetzt nicht mit deinem eigentlichen Problem zu tun hat...>> Hast du dir eigentlich beim Layouten mal darüber Gedanken gemacht wie du> deine Anschlussleitungen in die Schraubklemmen gesteckt bekommst?>> http://www.mikrocontroller.net/attachment/118664/DSCF1935.jpg>> Gruß,> Magnetus
Guten Morgen Magnetus,
das war mein absolut erstes Layout. Da war es mir dann egal, wenn ich
nciht überall 100%igen Zugang habe. Die Zeit war dann auch knapp und die
Fläche begrenzt. Um ein wenig zu programmieren, dafür reicht das Board
allemal. Ich muss dazu nicht an alle optionalen Schraubklemmen gelangen.
:-)
Das nächste Board wird weitaus verbessert werden. Zum einen wird eine 5V
Referenzspannungsquelle an den ADC angeschlossen.
Auch wird da Boadlayout hinsichtlicht einer taktung von 16MHZ optimiert
werden müssen. Ich denke da an die Masseverlegung siehe Bild.
mehr kann ich Dir zu dem Bild gar nicht so sagen. Die darf wohl nur von
einer Seite rein in den uC.
Viele Grüße,
Matthias.
Hallo,
danke ich werde die Routine vom Tutorial verwenden.
so sähe das wohl aus, wenn ich alle gleihczeitig aktivieren würde.
ADMUX = (1<<REFS0) ; // interne Spannung nutzen
ADMUX |= 0x04; //Motorpoti
ADMUX |= 0x03; //shunt
ADMUX |= 0x06; //Platinenpoti
da hatte ich noch zu wenig ERfahrung. Jetzt ist mir klar, dank Deines
Tipps, das man immer nur einen aktivieren kann!!
Sonst kommt eine ganz andere Konfiguration raus. :-)
Viele GRüße,
Matthias.