Hallo! Ich habe im Moment ein kleines Problemchen und zwar komm ich bei meinem Projekt im Moment so gar nicht vorran ... habe irgendwie den Überblick verloren und weiss auch nicht so Recht wonach ich suchen soll ... Lange Rede, kurzer Sinn... Mein ADU gibt mir ein 10Bit Wert aus: mov adlow, temp3 mov adhigh, temp4 Da ich nicht die komplette 10Bit Auflösung benötige wollte ich das ganze auf die obersten 8Bit reduzieren, die kann man dann ja auch leichter zum Display schicken.Ich möchte am Ende einfach nur von meinem Display die 8Bit Zahl (0 bis 256) angezeigt bekommen) 1) Wie mache ich aus meinen 10Bit in 2 Registern eine 8Bit Zahl in einem Register und... 2) .. mit welcher Routine steuer ich am besten mein WINTEK WD-C2704M-1HNN an. - ich progge in Assembler - ATtiny26 - da ich es mir mit dem proggen recht schwer tue, bitte ich ganz freundlich um eine gute Beschreibung ohne viele Verweise auf andere Codesammlungen usw ... wäre super Vielen vielen Dank im Vorras! Juppes
Christian K. schrieb: > - da ich es mir mit dem proggen recht schwer tue, bitte ich ganz > freundlich um eine gute Beschreibung ohne viele Verweise auf andere > Codesammlungen usw ... wäre super Wie wärs mit dem AVR-Tutorial
Zu Beginn sollte man sich die Port-Aufteilung am Mikrocontroller überlegen. An welchen Port soll das Display angeschlossen und in welchem Modus (4/8-Bit) soll es angesteuert werden? Kompletten Schaltplan zeichnen. Zur ASM-Programmierung: Das Steuerregister ADLAR des ADC in ADMUX so einstellen (1), dass das Ergebnis in den Registern ADCH/ADCL linksbündig ausgerichtet ist. Die 8 höchstwertigen Bits stehen dann in ADCH. Auslesen u. fertig. Dann benötigt man noch eine Routine zur Initialisierung des Displays (HD-44780 kompatibel), sowie eine Routine zur Ausgabe einer 8 Bit-Zahl. Beides ist in den AVR-Tutorials in ASM zu finden und muss nur noch an die verwendeten Ports angepasst werden ... Ralf2008
moin siehe Datenblatt • Bit 5 – ADLAR: ADC Left Adjust Result The ADLAR bit affects the presentation of the ADC conversion result in the ADC Data Register. If ADLAR is cleared, the result is right adjusted. If ADLAR is set, the result is left adjusted. Changing the ADLAR bit will affect the ADC Data Register immediately,regardless of any ongoing conversions. For a complete description of this bit, see “ADC Data Register – ADCL and ADCH” on page 106. mfg
Hi Was hast du denn bis jetzt an Code? MfG Spess
Hallo! Vielen Dank schon mal für eure Bemühungen! Habe soweit versucht alle eure Tipps umzusetzen. Bezüglich ADLAR hatte ich so meine Probleme da ich eigentlich erst den Mittelwert aus der Addition von 256 Messungen weiterverarbeiten wollte. Jetzt nehm ich einfach die 8 höchsten Bit der 10 Bit Messung .... Habe mir aus allen Foren usw schon ein Programm zusammengebastelt ... siehe Anhang. Allerdings weiss ich nicht genau wie ich mit Hilfe der Routinen mein 8 Bit Register an den LCD schicken kann. Ganz unten hab ich eine Dual-Dezimal-Umwandlund eingebaut, aber auch hier keine Ahnung wie ich die aufrufe. Juppes
Hi Einige unvollständige Bemerkungen: >.equ BAUD = 9600 ; Baudrate Wozu? Oder benutzt du die serielle Schnittstelle? An dieser Stelle fehlt die Initialisierung des Stackpointers. Sonst stürzt dein Programm bei jedem Unterprogrammaufruf unweigerlich ab > ldi temp1, (1<<REFS0) ; interne Referenzspannung 2,56v > out ADMUX, temp1 Diese Zeilen sind unnötig > ldi temp1, (1<<REFS1) > out ADMUX, temp1 > ldi temp1,(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADLAR)|(1<<ADPS0) Dein Vorteiler beträgt (ADPS3...0) 128. Damit ist der ADC-Takt mit ca.31kHz eigentlich schon zu langsam. > out ADCSRA, temp1 >Main: > clr temp1 ;temp1 löschen Wozu? >; ADC einlesen: in adlow, ADCL ; immer zuerst LOW Byte lesen in adhigh, ADCH ; danach das mittlerweile gesperrte High Byte Du hast ADLAR gesetzt. Damit befinden sich die acht höherwertigen Bits der Wandlung in ADCH und es reicht ADCH einzulesen. > ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden Und wo ist die? MfG Spess
spess53 schrieb: >> ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden > > Und wo ist die? Gute Frage, wie soll die aussehen und an welcher Stelle? Den Rest habe ich soweit abgeändert .... - Baud komplett gelöscht - Vorteiler auf 32 gesenkt - nur noch das highbyte wird ausgelesen Wie rufe ich jetzt die Unterprogramme auf um meine 8Bit-Zahl auszugeben?
Hi >Gute Frage, wie soll die aussehen Was verstehst an 'lcd_init:' nicht? >...und an welcher Stelle? Vor der Benutzung des Displays und nach der Stackpointerinitialisierung und dem Setzen der der Pins von PortB, an dem die Daten- und Steuerleitungen des Displays hängen, als Ausgang. >Wie rufe ich jetzt die Unterprogramme auf um meine 8Bit-Zahl auszugeben? Mal langsam. Bevor dein Display nicht läuft, gar nicht. Bekomme erst mal die Displayinitialisierung und die Ausgabe eines Zeichens in die Reihe. Am einfachsten macht du dir ein Programm das nur Stackpointer-Init, Datenrichtung für PortB, LCD-Init und LCD-ata enthält. Also ohne den ADC-Kram. MfG Spess
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.