Forum: Mikrocontroller und Digitale Elektronik DDRAM und tastenerkennung am adc


von Toni (Gast)


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:
1
LCDmenu:
2
3
  lcdsteu:
4
    ldi    r19, 4      ;3 mal aufs ergebnis testen
5
    clr    r16
6
    out    ddrc, r16
7
    out   portc, r16
8
    out   pinc, r16
9
    ;LCD konfig
10
    adc1start:
11
    ldi   r16, 0b01100001
12
    out   ADMUX, r16
13
    ldi   r16, 0b11000011
14
    out   ADCSR, r16
15
    adcfertig:        ;warte bis adc eine zahl in reg schreibt
16
    sbic  ADCSR, 6
17
    rjmp adcfertig
18
    in     r17, ADCL
19
    in     r18, ADCH
20
    ;wenn kein taster gedrückt (r<10), dannn ADC nochmal starten  
21
    cpi    r18, 10
22
    brlo lcdsteu      
23
    ;schleife, erstes mal in reg kopieren
24
    cpi    r19, 4
25
    brne    weiter      ;nur das erste mal das register kopieren
26
    mov    r20, r18    ;r20 = vergleichsregister, darf nicht geändert werden
27
    weiter:          
28
    ;hier dann 4 mal vergleichen, und überprüfen ob wert annähernd gleich
29
    dec    r19        ;zweite wandlung werden ergebnisse geprüft, ob annähernd gleich                                               
30
    ldi    r16, 20      ;hysterese -
31
    add    r18, r16    ;dazuaddieren
32
    cp     r20, r18    ;vergleiche 
33
    brsh lcdsteu      ;wenn ausser wert, nochmal eingänge prüfen
34
    ;rcall ms2        ;wartezeit
35
    subi  r18, 40      ;hysterese subtrahieren
36
    cp    r20, r18    ;vergleiche
37
    brlo lcdsteu      ;wenn ausser wert, nochmal eingänge prüfen
38
    ;sicherstellen, das taste nur 1 mal gedrückt
39
    cpi    r19, 0
40
    brne adc1start  
41
    ;hier dann entsprechenden wert verzweigen
42
    cpi    r20, 50
43
    brlo links
44
    cpi   r20, 100
45
    brlo oben
46
    cpi   r20, 145
47
    brlo rechts
48
    cpi    r20, 185
49
    brlo unten
50
    cpi    r20, 220
51
    brlo enter
52
    rjmp lcdsteu
53
54
;subroutine zum sicherstellen, dass taster nur 1 mal gedrückt
55
tasterdrueck:
56
  ;adc starten
57
  ldi   r16, 0b01100001
58
  out   ADMUX, r16
59
  ldi   r16, 0b11000011
60
  out   ADCSR, r16
61
  adcfertig2:        ;warte bis adc eine zahl in reg schreibt
62
  sbic  ADCSR, 6
63
  rjmp adcfertig2
64
  in     r17, ADCL
65
  in     r18, ADCH
66
  cpi    r18, 10      ;wenn taste wieder losgelassen...
67
  brlo tasterweiter    
68
  rjmp tasterdrueck    
69
  tasterweiter:      ;...dann return; ansonsten solange warten, bis taste wieder 0
70
  ret
71
72
;***************************Taster auswerten*********************
73
    
74
  links:
75
    ldi   r17, 0b00010000
76
    rcall befehl
77
    rcall tasterdrueck
78
    rjmp lcdsteu
79
80
  rechts:
81
    ldi   r17, 0b00010100
82
    rcall befehl
83
    rcall tasterdrueck
84
    rjmp lcdsteu

von Toni (Gast)


Lesenswert?

ich nochmal.

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

von Tilo (Gast)


Lesenswert?

Ich denke deine Informationen sind zu wenig.

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

von Toni (Gast)


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.

von Toni (Gast)


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 :)

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.