Forum: Mikrocontroller und Digitale Elektronik DTMF Dekoder und 8051er Passwortabfrage brauche Hilfe!


von Ertan M. (drbrain)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen :-)

ich zerbreche mir seit 3 Tagen meinen Kopf und ich komme zur keiner 
Lösung !

ich habe mir eine DTMF Dekoderschaltung gebaut dazu habe ich den 
beliebten Mitel MT8870D-1 Chip verwendet Dekoderschaltplan befindet sich 
im Dateianhang.
Die Schaltung funktioniert Reibungslos habe alle Tastenkombination 
ausprobiert und alle Ausgänge Q1-Q4 werden ordnungsgemäß mit 5V 
angesteuert.


Habe die Schaltung erweitert und die Ausgänge Q1 - Q4 an die Ports 
2.0-2.3
meines Atmel C8051ED2 Mikrocontrollers angeschlossen.
Den Est (PIN 16) Ausgang habe ich an meinem P1.0 angeschlossen.


Habe dazu ein kleines Programm geschrieben, womit ich ein 4 stelliges 
Passwort abgefragt werden kann.

Programmablauf:

1. mit * also Binär 00001011b kommt man in die Eingabe

2. über den P1.0 (ESt) wird abgefragt ob eine Taste gedrückt wurde, also 
High Pegel (der Pegel ist nur für einen Moment da und fällt gleich 
wieder ab)

3.abfragebcd BCD code wird abgefragt falls die Eingabe stimmt gehts 
weiter zu nächsten Abfrage wenn nicht fängt das Programm von vorne an

4.falls alles Abfragen richtig waren wird auf dem Display Hallo 
angezeigt


Mein Problem ist wenn ich das Programm im Debug laufen lasse 
funktioniert es ohne Probleme jedoch wenn ich es so laufen lasse 
funktionieren die ersten beiden Eingaben also *,9,2 und danach geht 
nichts mehr.


Der BCD Code wird auf den Port LED's richtig angzeigt jedoch nicht in 
der Abfrageroutine abgefragt bzw. erkannt !

wer kann mir Helfen


der Assembler Code ist hier:


include c51ed2.inc

Extern Code 
initLCD,loeschen,loeschzeile1,loeschzeile2,textzeile1,textzeile2,cursorp 
os,cursoran,cursoraus
Extern Code 
textaus,zifferaus,hexaus,dezaus,dualaus,dualaus1,dualaus2,charaus
Extern Code 
definierezeichen,loeschzeile3,loeschzeile4,textzeile3,textzeile4

Abfrage data p2


code ;at 0

public start:

lcall initLCD
lcall loeschen

call Eingabebeginn

loop1:
call polling2
cjne a,#9,loop1
lcall dualaus1

call polling2
cjne a,#2,loop1  // bis hier her funktionierts
lcall dualaus1

call polling2
cjne a,#9,loop1 // wird nicht mehr erkannt bzw. ausgeführt
lcall dualaus1  // im Debug läuft es ohne Probleme

call polling2
cjne a,#2,loop1
lcall dualaus1


call polling2
cjne a,#9,loop1
mov dptr,#Text
lcall textaus
Text: db 'Hallo',0

sjmp start


Eingabebeginn:
call abfragebcd
cjne a,#11,Eingabebeginn
ret


polling2:
mov a,p1
ANL a,#1
cjne a,#1,polling2
;jnb P1.0,polling2
call abfragebcd
ret

abfragebcd:
mov a,Abfrage
ANL a,#15 ; Akku wird mit Konstante verundet
ret

entry:
mov dptr,#text1
lcall textaus
text1: db 'Endlich',0
ret

end.


Datenblatt zu dem Mitel MT8870 Chip gibt es hier

http://pdf1.alldatasheet.com/datasheet-pdf/view/77085/MITEL/MT8870.html


ich hoffe Ihr könnt mir da Helfen

Gruß Ertan

von Manni (Gast)


Lesenswert?

was verwendest du für quartze??? der 8870 läuft bei mir mit 3.597M... 
benutzt du einen externen für dein controller??? eventuell ein 
Timing-Problem???

von Ertan M. (drbrain)


Lesenswert?

ich hab einen 3.597Mhz. verwendet und es mit dem Oszilloskop überprüft 
:-)!

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.