Forum: Mikrocontroller und Digitale Elektronik ATMega16 ADC Frage


von Alex (Gast)


Lesenswert?

Hallo, weiss jemand ob man den ADC-Wandler bei ATMega16 auch nur
teilweise benützen darf?
z.B.:
PA0 und PA1 = Analog eingang,
PA2 - PA7 Digital I/O.

von mmerten (Gast)


Lesenswert?

ja, geht problemlos. Nur sollte man nicht bei einer laufenden ADC
Wandlung auf den als Output verwendeten Ports schalten um
Verfälschungen des Messergebnisses zu vermeiden.

von womisa (Gast)


Lesenswert?

Hallo zusammen,

hat jemand ei kleines (ASM-Code)-beispiel, wie man die ADC Eingänge vom
Atmega16 benutzt?

Danke
Achim

von Hannes Lux (Gast)


Lesenswert?

Hallo...

Ich denke mal, dass man die auch nicht virel anders benutzt als beim
4433 (abgesehen von der sehr interessanten optionalen linksbündigen
Ausgabe, mit der man Einiges an Code sparen kann, wenn man nur 8 Bit
oder weniger braucht)...

Hier ein Beispiel für einen einfachen 6-fach PWM-Generator mit
Steuerung per ADC... (AT90S4433)

Bit- & Bytebruch... - ...HanneS...

von Hannes Lux (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, Anhang vergessen...

von womisa (Gast)


Lesenswert?

Hallo Hannes,

vielen Dank für den Beitrag. Ich bin absoluter "Neuling" bezüglich
der Atmel Programmierung und kenne den AT90S4433 nicht. Ich mache
derzeit meine ersten Gehversuche mit einem Atmega-16. Ich werde es mal
versuchen.

Für weitere Beispiele, passend für den Atmega16, wäre ich dankbar.

Gibt es sowas wie ein Monitorprogramm ?
-Verbindung über ser. Schnittstelle mit PC
-Speicher (RAM) lesen/schreiben
-I/O Status lesen/schreiben
-Betriebsmodi setzen etc. ....

Halt wie "früher" der 8080 Monitor, nur moderner.

Viele Grüße
Achim

von Hannes Lux (Gast)


Lesenswert?

Hallo Achim...

Auch ich bin absoluter Neuling beim AVR. Ohne "Studium" der
Datenblätter (und ich hatte nie Englisch-Unterricht, also alles mit
Wörterbuch!) geht nix. Es ist nicht wie beim C64, Amiga oder PC "Haste
mal'n Programm für mich?"...

Das Programm läuft sicher auch auf deinem 16er, du musst dazu erstmal
die Interrupt-Vektoren ändern. Dazu vergleichst du die 4433-Vektoren
mit denen des von dir verwendeten Typs und passt sie an. Dazu müsstest
du natürlich die Nase in die Datenblätter beider Typen stecken.
Dann musst du noch überprüfen, ob du die gleichen Ports verwendest,
evtl. das Programm danach anpassen. Beim Auslesen der ADCs hast du es
leichter, die Megas erlauben linksbündiges Auslesen der Daten, da
brauch man nicht so viel "schieben" wenn man (wie im Beispiel) nur 7
Bit braucht.

Aber es ging doch erstmal ums Prinzip. Lade das Programm ins
AVR-Studio, stelle Simulator und 4433 ein, lass es im Einzelschritt
laufen und beobachte dabei Register und I/Os. Und nachdem du "aha"
gesagt hast, programmierst du das für den Mega, abgewandelt nach deinen
Wünschen...

Falls es dir hilft, hier noch ein paar Gründe, warum ich dieses
Programm geschrieben habe und warum gerade für den 4433:

- Ein Freund suchte mehrere billigen Fahrregler für einen Teil seiner
Modellbahn (DDR-TT), wo aber nie rückwärts gefahren wird (Strecke).

- Wenn ich die ohne MC aufgebaut hätte, wären sie teurer geworden und
hätten den Nachteil, dass jede PWM eine andere Phasenlage hat und beim
Übergang von einem Stromkreis zum Anderen Sprünge möglich wären.

- Die Steuerung per MC gab mir eine einfache Möglichkeit, alle PWMs
miteinander zu synchronisieren, sie schalten alle zugleich ein und je
nach Tempowert wieder aus.

- Sollte eine Erweiterung nötig werden, so wird das Programm so
verändert, dass es über 2 bisher ungenutzte Ports Synchronsignale
sendet, die einen oder mehrere weitere AVRs per Ext.-INT statt per
Timer steuern und somit synchronisieren (einer zählt, einer löscht
Zähler).

- Bei 8 MHz Quarz erreiche ich eine PWM-Frequenz von etwa 960 Hz, was
für diesen Zweck mehr als genug ist (400 Hz hätten dicke gereicht). Und
dabei wurden keine für PWM vorgesehenen Timer-Features genutzt, die PWM
ist reine Software. Und dabei habe ich noch genug Rechenzeit in Reserve
(für Erweiterungen)...

- Da nur 6 Kanäle nötig waren, fiel die Wahl auf einen 4433, den ich
auch liegen hatte. Ein Mega32 war auch verfügbar, aber wozu mehr
einsetzen als nötig?

- Als Leistungstransistoren setzte ich BUZ71A ein, die gibts bei Pollin
für 20 Cent, als "Sicherungen" wurden
12V/35W-Halogen-Stiftsockellampen missbraucht.

Es muss nicht immer der beste und teuerste AVR sein, für ein System aus
Zifferngeber (3-stellige LED-Ziffernanzeige, Tastatur mit 12 Tasten,
Sync-Eingang und Impulsausgang) und Schaltdecoder (Impulseingang, 10
Ausgänge, 4 Jumper für Basisadresse und Modus) setzte ich AT90S1200
ein, mehr war nicht nötig.
Es ist doch nicht wie beim PC, dass man das Ergebnis am verwendeten
Prozessor misst, bei AVRs treibe ich keinen höheren Aufwand als für den
jeweiligen Zweck nötig ist.
Nun muss ich aber gestehen, dass ich nicht programmiere, um eine
Sammlung von Programmen für AVRs zu haben, sondern ich programmiere
erst, wenn ein konkret definiertes Problem gelöst werden muss. Ich
sammle auch keine Programme andrere Herkunft, schaue aber gern mal
rein, wenn der Quelltext (aber vorerst nur Assebler) gut zu verstehen
ist (Art der Kommentare).
Und inzwischen lassen sich viele relativ einfache Dinge mit AVRs besser
und vor allem billiger lösen als mit diskreter bzw.
TTL/CMOS-Technik...

Du fragst nach einem Monitorprogramm?
Da kann ich leider nicht mitreden, habe ich auch noch nicht vermisst,
ich versuche immer, mich in die Architektur des verwendeten AVRs
hineinzudenken und überprüfe das entstehende Programm im Simulator von
AVR-Studio. Um dabei nicht ewig in Schleifen zu herumzuhängen, setze
ich Breakpoints bzw. verändere ich Registerwerte von Hand.

8080... Da kann ich leider nicht mitreden, ich komme aus der anderen
Richtung: Commodore Plus/4, PC (DOS, WINDOWS bis W98SE). Auch beim PC
programmiere ich mir Dies und Jenes selbst, aber leider (durch die
Commodore-Vorbelastung) in den falschen Sprachen: QBASIC,
Visual-BASIC... C++ wäre da wohl besser gewesen... Nungut, etwas HTML &
JavaScript mache ich auch, aber nur wenig...

Viel Erfolg...
Bit- & Bytebruch... - ...HanneS...

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
Noch kein Account? Hier anmelden.