Hi zusammen, Eure Gemeinschaft war bisher für mich immer sehr ergiebig, über dieses Thema hab' ich aber noch nix gefunden: Hat irgend jemand eine möglichst einfache Lösung mit einem ATmega32 per ADC differentiell (ADC0+, ADC1-, x1) mittels GCC den Analogwert einzulesen (und zu berechnen)? Ist im Gegensatz zum Tiny26 etwas kompliziert. Ich nutze den ADC auch single-ended (was funktioniert) und habe deshalb eine gemeinsame Funktion (siehe Anhang). Würde mich freuen wenn jemand was wüßte! Gruß Thilo
Gast
#395250
beim gcc muß ich zwar direkt passen, aber bei bascom läufts so ... getadc(0) bis getadc(7) ist singleinded, getadc(8) ist dann z.B. differentiell. schau mal ins datenblatt, wie welcher differentielle modus registermäßig verschlüsselt ist.
Gast
#395251
Die Einstellung und die Abfrage des ADC sind kein Problem, Schwierigkeiten machen nur noch die Auswertung des Messergebnisses (000H .. 1FFH => positiver Bereich, 200H .. 3FEH => negativer Bereich, MSB => Vorzeichen). Muss ich mir doch die Zeit nehmen und was ausknobeln. Danke erstmal.
Gast
#395252
Wenn Du mit dem ermittelten ADC-Wert rechnen willst, dann mußt Du ihn vorher zu einer "richtigen" negativen Zahl im Zweierkomplement konvertieren. Ob der ADC-Wert negativ ist, gibt ein gesetztes Bit 9 an. In diesem Fall sind dann auch noch die Bits 10 bis 15 zu setzen und man hat eine echte negative Zahl mit der sich ganz normal rechnen läßt.
Gast
#395253
Hallo Thilo, Ich persönlich verwende volgende Lösung für Differentielle modus. Branko
Gast
#395254
Und die Headerdatai.
Gast
#395255
Hi Leute, danke für die Hilfe! Hatte vor lauter Hochsprache die Grundlagen des Binärsystems vergessen! Jetzt läuft's jedenfalls! Gruß Thilo
Gast
#395256
Ich nochmal, falls jemand Interesse (oder Verbesserungsvorschläge) haben sollte, hier meine Lösungen zum AD-Wandler, einmal 'single-ended' und einmal 'differentiell' für ATmega32. Das handling der Funktionen erklärt sich von selbst. Gruß Thilo
Gast
#395257
Das Verhalten von C bei arithmetischem Überlauf vorzeichenbehafteter
Daten ist undefiniert. Eine Subtraktion durch Addition des Komplements
zu ersetzen, ist also nicht zu empfehlen ("ADC_temp += 64512;"), auch
wenn's hier funktioniert.
Gast
#395258
Vollkommen richtig! Sollte wirklich vermieden werden. Der ADC gibt halt nur 10 bit 'raus, deshalb hab' ich nicht weiter gedacht. Danke, hatte ich vergessen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.