mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DDRAM und tastenerkennung am adc


Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tachchen!!!

ich mühe mich schon eine ganze weile mit diesen 2. themen ab. das LCD 
funktioniert, die tastenabfrage per lcd leider nicht.
fang ich mal mit dem ddram vom lcd an.
ich habe ein 8x2 display, demnach liegt die adresse für die 2. zeile bei 
0x40. schreibe ich diese zahl als befehl ins lcd, im anschluss ein paar 
buchstaben; passiert rein gar nix.
passe ich den string aber an, also mache alles bis zur 62. stelle voll 
mit leerzeichen (o.ä.), und gebe danach meinen weiteren text ein, 
funktioniert alles einwandfrei. was mache ich falsch?

dann zur tastenabfrage.
habe 5 tasten an den adc1 angeschlossen und nun einen relativ 
komplizierten code geschrieben ( blicke selbst manchmal nichtmehr durch, 
vor sovielen vergleichen :)), der auch soweit funktioniert hat ( ist 
halt immer 2-6 stellen gesprungen) bis auf diese flankenerkennung. da 
man beim adc leider keine bits hat, sondern ständig ein byte vergleichen 
muss, ist das alles eher schlecht als recht. hat jemand ne idee, wie ich 
diese flankenerkennung funktionierend ausführen kann? meine idee war 
einfach, zu warten, bis der adc wert wieder (annähernd) 0 erreicht, das 
scheint aber irgendwie nicht zu funktionieren :(.

hier nich der code für die tastenerkennung:
LCDmenu:

  lcdsteu:
    ldi    r19, 4      ;3 mal aufs ergebnis testen
    clr    r16
    out    ddrc, r16
    out   portc, r16
    out   pinc, r16
    ;LCD konfig
    adc1start:
    ldi   r16, 0b01100001
    out   ADMUX, r16
    ldi   r16, 0b11000011
    out   ADCSR, r16
    adcfertig:        ;warte bis adc eine zahl in reg schreibt
    sbic  ADCSR, 6
    rjmp adcfertig
    in     r17, ADCL
    in     r18, ADCH
    ;wenn kein taster gedrückt (r<10), dannn ADC nochmal starten  
    cpi    r18, 10
    brlo lcdsteu      
    ;schleife, erstes mal in reg kopieren
    cpi    r19, 4
    brne    weiter      ;nur das erste mal das register kopieren
    mov    r20, r18    ;r20 = vergleichsregister, darf nicht geändert werden
    weiter:          
    ;hier dann 4 mal vergleichen, und überprüfen ob wert annähernd gleich
    dec    r19        ;zweite wandlung werden ergebnisse geprüft, ob annähernd gleich                                               
    ldi    r16, 20      ;hysterese -
    add    r18, r16    ;dazuaddieren
    cp     r20, r18    ;vergleiche 
    brsh lcdsteu      ;wenn ausser wert, nochmal eingänge prüfen
    ;rcall ms2        ;wartezeit
    subi  r18, 40      ;hysterese subtrahieren
    cp    r20, r18    ;vergleiche
    brlo lcdsteu      ;wenn ausser wert, nochmal eingänge prüfen
    ;sicherstellen, das taste nur 1 mal gedrückt
    cpi    r19, 0
    brne adc1start  
    ;hier dann entsprechenden wert verzweigen
    cpi    r20, 50
    brlo links
    cpi   r20, 100
    brlo oben
    cpi   r20, 145
    brlo rechts
    cpi    r20, 185
    brlo unten
    cpi    r20, 220
    brlo enter
    rjmp lcdsteu

;subroutine zum sicherstellen, dass taster nur 1 mal gedrückt
tasterdrueck:
  ;adc starten
  ldi   r16, 0b01100001
  out   ADMUX, r16
  ldi   r16, 0b11000011
  out   ADCSR, r16
  adcfertig2:        ;warte bis adc eine zahl in reg schreibt
  sbic  ADCSR, 6
  rjmp adcfertig2
  in     r17, ADCL
  in     r18, ADCH
  cpi    r18, 10      ;wenn taste wieder losgelassen...
  brlo tasterweiter    
  rjmp tasterdrueck    
  tasterweiter:      ;...dann return; ansonsten solange warten, bis taste wieder 0
  ret

;***************************Taster auswerten*********************
    
  links:
    ldi   r17, 0b00010000
    rcall befehl
    rcall tasterdrueck
    rjmp lcdsteu

  rechts:
    ldi   r17, 0b00010100
    rcall befehl
    rcall tasterdrueck
    rjmp lcdsteu

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich nochmal.

hab vor dem ADC ein RC tiefpass, mit 47n und 1kohm, ist das zu wenig?

Autor: Tilo L. (katagia)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke deine Informationen sind zu wenig.

Was für ein Controller, was für ein Display, ....

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Atmega 8, lcd unbekannt. weiß nur das es ein 8x2 ist mit diesem hd44.... 
IC oder vergleichbarem. ( initialisiere ich es als 16x1 speilt es 
verrückt, alle balken schwarz. desweiteren würde es auch keinen sinn 
ergeben zu
"passe ich den string aber an, also mache alles bis zur 62. (hex 40) 
stelle voll mit leerzeichen (o.ä.), und gebe danach meinen weiteren text 
ein, funktioniert alles einwandfrei.
"
)
gibts lcd´s, bei denen man den ddram nicht festlegen kann? das macht für 
mich wiederum keinen logischen sinn. ist der aufruf evtl falsch? lade ja 
nur das 0b1xxxxxxx in das r17 und rufe dann die routine zum befehl 
senden auf. ( alle anderen befehle funktionieren; cursor shift, clear 
display usw. )
vielleicht hat noch jemand eine idee.

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, ich hab nun mal den kondensator auf 1n verringert, nun springt das 
ding wild hin un her. ist aber schon besser geworden. ich glaube, ich 
schließ die scheiß taster einfach an einen port an, das geht mir langsam 
auf die nerven :)

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.