mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wert des ADU auf Display ausgeben / ATtiny / Assembler


Autor: Christian K. (juppes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ralf2008 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Was hast du denn bis jetzt an Code?

MfG Spess

Autor: Christian K. (juppes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian K. (juppes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.