Hallo zusammen, ich habe einen AT90CAN128. ich lese zu beginn meines Programmes alle 8 ADC-Ports direkt nacheinander ein. nun stelle ich fest, dass sich die Werte gegenseitig beeinflussen, sprich: wenn ich das zu messende Spannungssignal am ersten ADC-Port verändere, so verändern sich auch alle nachfolgenden Werte der 7 weiteren Ports, obwohl die dort anliegenden Signale konstant geblieben sind. weiß jem woran es liegen könnte. ich lese bei jeder Messung immer einen "WarmUP" Wert aus und setze die Variablen immer wieder auf 0 zurück. die Funktion aus dem "AVR-GCC-Tutorial" was ich hier mal gefunden habe. ich habe sie etwas verändert, nicht viel. mfg Andreas
Als erstes fällt mir auf: ADCH und ADCL sind Read-Only-Register. Die kannst Du nicht schreiben!
Ich kann im Code konkret keine dicken Fehler entdecken. Allerdings ist der Code erstens unvollständig (wo ist main?) und außerdem unformatiert und somit schlecht lesbar. Abgesehen davon: Ich kenne keinen AVR-C-Compiler, der keinen 16-Bit-Zugriff auf die ADC-Ergebnisregister unterstützt. Das Gefuddel mit der richtigen Reihenfolge beim Auslesen und High-Byte schieben usw. ist in C überflüssig.
das wäre meine 2. frage gewesen. in dem tutorial hat er ein 8bit register ausgelesen. und hat sich auch immer den mittelwert aus 4 messungen von der funktion Readchannel() zurückgeben lassen. deswegen ist da auch die for-schleife noch drin. Ich wußte nicht, wie ich das bei zwei 8bit registern (10bit adc-port) machen sollte, deswegen hab ich da rumgeschoben. kannst du mir sagen, wie du die werte der ADCH- und ADCL-register übergeben würdest? so, dass man auch nen mittelwert bilden kann.
ok, hab den fehler. hatte vorher "ADMUX |= mux" geschrieben, hab nun "ADMUX=mux" und es läuft. das mit dem mittelwert und dem auslesen ohne schiebeoperatoren funzt auch. danke und schönes we:)
Ist klar, wenn Du die MUX-Bits mit |= setzt, ohne sie vorher alle gelöscht zu haben, steht natürlich irgendwann "111" da drin....
Tag zusammen, @ Andreas R. Könntest du deinen jetzt funktionierenden Code mal bitte posten!? Ich will in den nächsten Wochen auch mal n bissel mit ADC-Ports rumspielen und bin nicht grade die größte Leuchte was C angeht, da sind beispiele immer hilfreich! Danke im Voraus!!! Gruß Bouni
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.