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.
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.
Hallo zusammen, hat jemand ei kleines (ASM-Code)-beispiel, wie man die ADC Eingänge vom Atmega16 benutzt? Danke Achim
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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.