;AD-Wandler - Programm für 80C552
;Assembler ist von Metalink (umsonst bei Philips.de etc.)
$mod552
datanf set 0
datend set 7fh
org 0
sjmp start
org 3
clr EX0 ;Taste deaktivieren
acall _reti ;weitere Interrupts enablen
acall _ppause ;große Pause für die Taste
reti
org 0bh
dec A
reti
org 53h
mov 20h,ADCON ;Low-Byte von ADC
mov 1fh,ADCH ;High-Byte von ADC
anl ADCON,#239 ;vor Neustart ADCI löschen!
orl ADCON,#8 ;neue Wandlung starten
anl 20h,#11010000b ;Bit1-0 + ADCI bleiben
reti
org 80h
start: mov IEN0,#83h ;Enable All + T0/EX0 -Interrupt
mov TMOD,#0 ;Timer0/16bit
orl PCON,#1 ;warten auf Tastendruck /EX0
mov DPTR,#datanf-1 ;initialisieren Speicher
setb EAD ;AD-Wandler-Interrupt aktivier.
orl ADCON,#8 ;Start AD-Wandler
acall _click ;Programm zur Aufnahme von Volt
clr EAD ;danach Interrupt sperren
acall _pause ;zum Auslaufen d. letzt. Wandl.
anl ADCON,#239 ;danach ADCI löschen (falls
;Unterprogramm _click öfter
;aufgerufen wird)
;hier kommen noch Befehle für Unterprogramme (Schnittstelle), die
;natürlich hier auch noch fehlen!
org 100h
_click: jnb 20h.4,_click ;warten auf ADC-fertig/K1
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov B,20h ;Bit1-0 retten/K1
mov A,1fh ;Bit9-2 laden/K1
inc DPTR
movx @DPTR,A ;Bit9-2 von K1 speichern
jnb 20h.4,$ ;warten auf ADC-fertig/K2
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov A,1fh ;Bit9-2 laden/K2
rr A
rr A
anl A,#00111111b ;Bit9-4 bleiben übrig
orl A,B ;Bit1-0/K1+Bit9-4/K2
inc DPTR
movx @DPTR,A ;speichern
mov A,1fh ;Bit9-2 erneut laden/K2
anl A,#00000011b ;Bit3-2 bleiben übrig
orl A,20h ;Bit1-0+3-2
rr A
rr A
mov B,A ;Bit3-0 retten
jnb 20h.4,$ ;warten auf ADC-fertig/K3
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov A,1fh ;Bit9-2 laden /K3
swap A ;Bit9-6 als unteres Nibble
anl A,#00001111b ;bleiben übrig
orl A,B ;Bit3-0/K2+Bit9-6/K3
inc DPTR
movx @DPTR,A ;speichern
mov A,1fh ;Bit9-2 erneut laden /K3
swap A ;Bit5-2
anl A,#11110000b ;bleiben übrig
mov B,A ;Bit5-2 retten
mov A,20h ;Bit1-0 laden/K3
swap A ;Bit1-0 auf Bitposition 3-2
orl A,B ;Bit5-0
mov B,A ;Bit5-0 retten/K3
jnb 20h.4,$ ;warten auf ADC-fertig/K4
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov A,1fh ;Bit9-2 laden/K4
rl A
rl A
anl A,#00000011b ;Bit9-8 bleiben übrig
orl A,B ;Bit5-0/K3 + Bit9-8/K4
inc DPTR
movx @DPTR,A ;speichern
mov A,1fh ;Bit9-2 erneut laden/K4
rl A
rl A
anl A,#11111100b ;Bit7-2 bleiben übrig
mov B,A ;Bit7-2 retten
mov A,20h ;Bit1-0 laden/K4
rl A
rl A
orl A,B ;Bit7-0/K4
inc DPTR
movx @DPTR,A ;speichern
mov A,#datend ;bis Speicher voll ist o.ä.
cjne A,DPH,Q000
ret ;sonst Rücksprung
Q000: ajmp _click
org 200h
_pause: djnz ACC,_pause
ret
org 280h
_ppause: mov A,#10
setb TR0
jnz $
clr TR0
reti
org 300h
_reti: reti
end
;****************************************************
;Programm läßt den AD-Wandler fast ohne Unterbrechung
;laufen, speichert die Resultate in 1fh/20h ab - muß
;sein, da sonst die Resultate "erschüttert" sind (der
;Monitor auf dem PC legt diesen Ausdruck nahe);
;während die nächste Wandlung läuft, wird das alte 10bit-
;Ergebnis redundanzfrei
;, d.h. ohne Speicherplatzverschwendung, abgespeichert;
;insgesamt werden bei einem U-Programm-Durchlauf 4 mal
;10bit-Resultate auf 5 mal 8bit -Speicherplätze abgespeichert
;(KGV von 8 und 10 ist 40);
;wer will, kann sich von mir das komplette Programm gegen
;eine Gebühr von Porto + Diskette (kann nicht viel sein)
;schicken lassen (erst mal umsonst, da ich nicht weiß, was
;ich selber bezahlen muß); dazu gehört jedoch noch Controller-
;seitig das Schnittstellen-Programm und zur grafischen Wieder-
;gabe ein PC-Programm (läuft unter DOS), das die Stichproben
;des AD-Wandlers auf dem Monitor anzeigt, d.h. auf 8bit reduziert
;bzw. mit Page-Wechsel auch 10bit; dieses Programm ist sicher
;noch verbesserungswürdig! der Code ist in jedem Fall free!
;zu erhalten bei Thomas Strauß
Landsberger Allee 81
10407 Berlin - Prenzlauer Berg
0175-254 80 83
Postkarte schicken!
ich habe 8 sensoren die wandeln mir die tempeatur um in spannungen von 0-5v.ich verwende jedoch den AT90S8535.ich will jeden eingang des ad wandlers fur einen sensor benutzen.kann mir dein programm helfen die 8 analogen daten einzulesen und seriell in einem protokoll verpackt wieder rauszugeben. die analogen spannungen werden ununterbrochen eingelesen 24 h am tag.und sollen gleich rausgegeben werden.
Hallo Gill
Man kann mein Programm dazu verwenden, beliebig viele Analog-Eingänge
hintereinander abzufragen und vier * 10bit-Resultate auf 5*8bit
Ramplätze abzulegen; dazu müsste man in der Interrupt-Routine den
Eingang entsprechend umschalten. Z.B. alternierend
im ADCON-Control-Register die Pin-auswählenden Bits hochzählen
und dann wieder von Null bis zum höchsten Wert.
z. B. mit folgender Syntax: inc bit2-0 ;Bits für die 8 Inputs
anl bit2-0,#7 ;max. 7
etwas schematisch; vielleicht muß das Register erst in den Akku geladen
werden und alles nach rechts rotiert werden, bis das Bit, was für
Eingang 0 zuständig ist, auf Bitposition 0 ist, und anschließend alles
zurückgeschrieben werden in das ADCON-Register. Das sähe dann etwa so
aus:
mov A,ADCON
ror A
ror A
...
inc A
anl A,#7
mov ADCON,A
Der AT80535 ist meiner Vermutung nach ein Siemens SAB80535 -
Nachfolger, von Atmel. Der SAB80535 hat jedoch nur einen 8bit-
AD-Wandler, so daß mein Programm hierfür nicht verwendet werden
kann; falls Dein Chip jedoch auch über einen 10bit-Wandler (1024
Stufen-Auflösung)verfügt, könnte mein Programm - nach Anpassung
auf die anderen Special-Function-Registern und mit oben genannter
Umschaltung, für dein Problem interessant sein;
Das Protokoll würde dann nur darin bestehen, die Daten in der richtigen
Reihenfolge zu entschlüsseln; die Reihenfolge der Daten
entspräche dann den Sensoren;
bei einem Chip mit 8bit-AD-Wandler würde es auch reichen, die
Reihenfolge der abgelegten Bytes (AD-Resultate)beim Empfangsgerät
einzuhalten; aber sehr sicher ist diese Methode natürlich nicht.
Man könnte vorab eine 3-stellige Binärzahl zu dem AD-Resultatsbyte
absenden, die die 8 möglichen Sensoren angibt, zu dem das Byte gehört;
das heißt jedoch, man muß dann 11bit abspeichern mit Einhalten der
Reihenfolge oder man nimmt 16bit, wobei das erste Byte die Nummer des
Sensors enthalten würde, das zweite Byte die Information dazu! Das ist
natürlich leichter abzuspeichern.
Die Reihenfolge ist dann immer noch wichtig; ein Protokoll, was
sicher sein soll, muß dann schon komplizierter sein; die Nummer
des Sensors vorab, und davor vielleicht eine Kennung, daß jetzt
eine neue Information kommt, unabhängig von der vorhergehenden...
Mit solchen Problemen habe ich mich bisher noch nicht beschäftigt,
das ist Nachrichtentechnik und ein weites Feld; am besten beschäfigt man
sich dann mit Nachrichtenübertragung und dergleichen;
Das vollständige Programm ist noch umfangreicher; ich werde es demnächst mit einem dazugehörigen DOS-Programm als Open-Source und als ausführbare Datei absenden; das Dos-Programm kann insge- samt über 32000 Stichproben als Kurvendiagramm anzeigen, 624 Stichproben mit 8bit und jeweils 16 Stichproben mit 10bit Auflösung als Zoom; Ausdrucken geht auch. Zur grafischen Auswertung von x-y-Kurven (Temperatur-Zeit etc.).
Hallo. Ich benutze einen 89c2051. Gibts dafür auch eine Rutine?? Der hat ja auch 2 analoge Eingänge
Der 89C2051 hat aber keine AD-Eingänge! Das sind einfache Vergleichseingänge (Komparator). Diese können zwei analoge Spannungen miteinander vergleichen, aber viel mehr nicht. Gruß Elektrikser
Hallo, Ich bin auf der Such nach einem Elektroniker der uns weiterhelfen kann. Wir sind eine Gruppe von 9 Bikern und haben ein Problem wo uns bis jetzt keiner weiter helfen konnte. Ich hoffe das Sie uns dabei helfen können. Mir ist bei der Suche nach einem Miniatur Sender / Empfänger Ihre Seite in die Hände gefallen. Ich suche verzweifelt nach einem A/D D/A Wandler ( Konverter) der in der Lage sein sollte auf der einen Seite den Bluetooth USB auf zu nehmen und die Digitalen Informationen umwandelt in Analoge Informationen und auf der anderen Seite einen Line / IN und Line /out haben sollte. Das Problem ist folgendes: Wir haben sowohl Radio als auch Funk an den Motorrädern, nun ist mir das Kabel vom Helm zum Moped irgendwie zu viel und möchte das ganze über Bluetooth machen, leider finde ich nicht einen geeigneten Wandler Der meinen Bluetooth Stick aufnehmen kann und mir die Möglichkeit bietet, die analogen Sachen wie mein Radio und Funk über diesen Bluetooth Stick zu senden. Habe schon bei Conrad und Konsorten nachgeschaut aber ich finde nicht das was ich suche, Könntest Sie uns vielleicht weiter helfen. Ich stehe Ihnen gerne für weitere Infos zu Verfügung. Danke im Voraus Gruß Manfred
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.