|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 04.09.2006, 17:47 Titel: LM75 |
|
|
Hallo zusammen,
stimmen diese Werte, wenn ich die Daten des LM75 auswerten will?
Diese Daten beziehen sich auf die Temperaturen.
Angegeben wird die Temperatur, der Binärcode und die Hexadezimalschreibweise:
http://home.arcor.de/andy.bos/LM75.txt
Wenn diese Daten so stimmen, ist das Problem bei mir, dass ich nicht weiss, wie ich in die Minustemperaturen gehen soll.
Cu Andy |
|
Nach oben |
|
|
OdinX
Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 04.09.2006, 18:40 Titel: |
|
|
nimm die stelle ganz links im binärcode als corzeichen.
1 ist minus und 0 ist plus oder umgekehrt |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 05.09.2006, 12:01 Titel: |
|
|
Hm, in Binärschreibweise stellt (zumindest beim PC->ASM) ein Bit (weiß nicht, ob's das erste oder letzte (von links nach rechts!) war) dar, ob ein Vorzeichen, also das Minus, vonnöten ist, um die Zahl korrekt darzustellen. _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 05.09.2006, 18:17 Titel: |
|
|
°C Dezimal binär hexadezimal
- 55 402 110010010 192
Nun meine Frage:"Wie wird der binäre Wert hinausgeschoben.
Von rechts nach links, oder von links nach rechts."
Zudem wollte ich Fragen, ob 9 Bit hinausgeschoben werden müssen.
Dies ist alles wichtig, wenn ich ein Programm schreiben will.
Zudem wollte ich Fragen, ob es Probleme mit der lpt1 Schnittstelle unter Windows XP gibt.
Hoffe ihr könnt mir umgehend helfen. |
|
Nach oben |
|
|
Kai Bareis
Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 05.09.2006, 20:09 Titel: |
|
|
Also erstmal Datenblattblatt genau anschauen. ist immer sehr hilfreich. LM75
Dort steht auf Seite 9 Wie das Temparatur Daten Format aufgebaut ist.
Und LPT / XP kann eventuell zu problemen mit Qbasic kommen ansonsten hilft dir die ForenSuche wenn du nach UserPort suchst. _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 06.09.2006, 07:00 Titel: |
|
|
also liege ich damit richig, dass ich 9 Bit erhalte |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.09.2006, 10:42 Titel: |
|
|
Hallo
Mit den 9 Bit liegst du richtig. Dabei ist das erste Bit, das ganz links steht und (denke ich zumindest) auch zuerst gesendet wird, wie schon beschrieben das Vorzeichen. 0 steht für plus, 1 für minus. Ist die Zahl negativ, wird der Wert als Zweierkomplement gesendet. D.h. der Wert muss noch invertiert und Eins dazugezählt werden.
Wenn es mit dem LPT Probleme gibt, kannst du auch den COM-Port benutzen und für I²C einen Ein- und einen Ausgang zu einer bidirektionalen Leitung zusammenfassen.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 11.09.2006, 16:38 Titel: |
|
|
Ok, so gut so weit.
Also benötige ich für den LM75 folgendes:
Eine Versorgungsspannung VCC
Eine Masse, also GND.
2 Datenausgänge und ein Dateneingang.
Stimmt das soweit? |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 11.09.2006, 16:51 Titel: |
|
|
Hallo
Im Prinzip ja, die Funktion der Interruptleitung ist mir noch nicht ganz klar, da müsste man das Datenblatt nochmal genauer Studieren. Ich nehme aber an, das man die nur für bestimmte Funktionen braucht. Der einzige I²C-Baustein, mit dem ich bisher gearbeitet habe, war ein serieller EEPROM, den konnte man gleich vom COM aus mit Strom versorgen. Über A0-A2 kannst du ja verschiedene Adressen vorgeben, so könntest du bis zu acht ICs an einem COM-Port anschliessen.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 11.09.2006, 17:03 Titel: |
|
|
Diesen Code verwende ich bis jetzt, um den Binärcode auf den LM75 zu schreiben:
'Startsequenz auf den i2c-BUS schreiben
'SDA low
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL low
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
FOR i = 1 TO 8
ln$ = "10010001"
e1$ = MID$(ln$, 1, 1)
e2$ = MID$(ln$, 2, 1)
e3$ = MID$(ln$, 3, 1)
e4$ = MID$(ln$, 4, 1)
e5$ = MID$(ln$, 5, 1)
e6$ = MID$(ln$, 6, 1)
e7$ = MID$(ln$, 7, 1)
e8$ = MID$(ln$, 8, 1)
if i = 1 then
if e1$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,1
print e1$
end if
if i = 2 then
if e2$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,2
print e2$
end if
if i = 3 then
if e3$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,3
print e3$
end if
if i = 4 then
if e4$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,4
print e4$
end if
if i = 5 then
if e5$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,5
print e5$
end if
if i = 6 then
if e6$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,6
print e6$
end if
if i = 7 then
if e7$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,7
print e7$
end if
if i = 8 then
if e8$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 64
CLOSE #1
'SCL low
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
CLOSE #1
locate 1,8
print e8$
end if
NEXT |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 11.09.2006, 17:20 Titel: |
|
|
Ja und? Funktioniert's? Sieht etwas umständlich aus, warum z.B. das OPEN COM? Das brauchte ich nicht. Du könntest das ganze noch etwas strukturieren, indem du SUBs für Start und Stop, Lesen und Schreiben, Acknowledge usw. machst. Ach - und beim Anschluss an den COM Zenerdioden nicht vergessen um dessen +/- 12V Spannung auf 0 bzw. +4,7V herunterzuregeln. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 11.09.2006, 18:20 Titel: |
|
|
hat von euch einer ein fertiges Programm für die serielle Schnittstelle.
Cu Andy |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 11.09.2006, 23:05 Titel: |
|
|
Hallo
Ich würde den LM75 so an den COM anschliessen:
Dazu habe ich mein I²C-EEPROM-Programm mal passend umgebastelt. Ich kann es natürlich nicht testen, weil ich keinen LM75 hier habe, aber so ungefähr könnte es gehen. Die Registeradressen sind die für COM1, das Programm liest nur die Temperatur, die ganzen Sonderfunktionen die das Teil bietet, werden hier erstmal nicht berücksichtigt
Code: | CLS
adresse = 144 '10010000
OUT 1019, 64 'TxD als Spannungsvers. einschalten
DO
OUT 1020, 3 'DTR (SDA) und RTS (SCL) auf high
OUT 1020, 2 'SDA auf low waehrend SCL auf high->Startbedingung
OUT 1020, 0
GOSUB schreiben
GOSUB lesen
GOSUB acknowledge
highbyte = byte
GOSUB lesen
GOSUB keinacknowledge
lowbyte = byte
OUT 1020, 0
OUT 1020, 2
OUT 1020, 3 'SDA auf high waehrend SCL auf high->Stopbedingung
vorzeichen = highbyte AND 128
temperatur = (highbyte - vorzeichen) * 2 + (lowbyte AND 128) / 128
IF vorzeichen = 128 THEN temperatur = 256 - temperatur
temperatur = temperatur / 2
LOCATE 1, 1
PRINT USING "####.#"; temperatur; : PRINT " øC"
LOOP WHILE INKEY$ = "" 'Beenden mit beliebiger Taste
GOTO ende
schreiben:
bitwert = 128
FOR bit = 0 TO 7
IF (adresse AND bitwert) = bitwert THEN aus = 1 ELSE aus = 0
OUT 1020, aus
OUT 1020, aus + 2
OUT 1020, aus
bitwert = bitwert / 2
NEXT
OUT 1020, 1
OUT 1020, 3
IF (INP(1022) AND 16) = 16 THEN PRINT "IC antwortet nicht.": GOTO ende
OUT 1020, 1
OUT 1020, 0
RETURN
lesen:
bitwert = 128
byte = 0
OUT 1020, 1
FOR bit = 0 TO 7
OUT 1020, 3
IF (INP(1022) AND 16) = 16 THEN byte = byte + bitwert
OUT 1020, 1
bitwert = bitwert / 2
NEXT
OUT 1020, 0
RETURN
acknowledge:
OUT 1020, 0
OUT 1020, 2
OUT 1020, 0
RETURN
keinacknowledge:
OUT 1020, 1
OUT 1020, 3
OUT 1020, 1
OUT 1020, 0
RETURN
ende:
OUT 1019, 0 'TxD ausschalten
OUT 1020, 0
END |
Würde mich selbst mal interessieren, ob sich damit was tut.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 12.09.2006, 12:49 Titel: |
|
|
@chef Skilltronic:
Ich werde den LM75 dann heute noch nach Deiner Schaltung daran betreiben, jedoch muss ich mir erst noch einmal ein paar Bauteile hierfür besorgen.
Aso, ich hab mal schnell die Spannung daran gemessen.
Die Spannung beträgt, 9,91 Volt.
So Z-Dioden sind da, inklusive der Widerstände.
Nun geht das Problem weiter:
Ich habe ein Beinchen des LM75 abgebrochen.
Also was musste ich demnach wieder machen?
Ajo, beim Reichelt die Sachen bestellen:
Sind gesamt 6 Stück vom Temperatursensor LM75.
Diese LM75 werde ich dann mit Schieberegister betreiben.
Nun meine Frage an Skilltronic.
Die Z-Dioden sorgen doch dafür, dass die Spannung bei 4,7 Volt bleibt oder.
Das nächste wäre, dass ich ein alt ausgediehntes PC-Netzteil als Stromversorgung verwende.
Also einmal die 5 Volt angezapft.
Nun meine Frage an Skilltronic:
Kann ich weiterhin die Z-Dioden 4,7 Volt verwenden?
Bis denne
Cu Andy |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 12.09.2006, 20:06 Titel: |
|
|
Hallo
Welches Beinchen ist denn abgebrochen? Wenn es eins von den Adresseingängen A0-A2 ist oder der O.S.-Ausgang, ist es nicht so schlimm.
Eine zusätzliche Stromversorgung brauchst du nicht. Die maximale Stromaufnahme des LM75 ist mit 1mA angegeben, bei 6 Stück also maximal 6mA, die aber auch nicht erreicht werden, weil nicht immer alle gleichzeitig das Maximum brauchen. Aber selbst 6mA schafft der TxD-Ausgang am COM noch, den ich ja als Stromversorgung benutze. Wenn du trotzdem eine externe Stromversorgung mit 5V willst, brauchst du dort keine Z-Diode. Dürftest du in dem Fall auch nicht so einfach ohne Vorwiderstand, sonst kann die Diode durchknallen. Der COM hat schon Vorwiderstände intern eingebaut. An SDA und SCL brauchst du die Zenerdioden schon, weil der COM ja wie gesagt +/-12 Volt Pegel hat.
Ein Schieberegister brauchst du auch nicht. Wie ich ebenfalls schon geschrieben hatte, kannst du über die Eingänge A0-A2 die einzelnen ICs adressieren. Das geht so. Im Programm wird ja zuerst ein Byte an den LM75 gesendet. In meinem Beispiel 144 dezimal was 10010000 binär entspricht. Die ersten vier Bit, die 1001 sind der Teil der IC-Adresse, der intern "verdrahtet" ist. Die bleibt immer gleich. Die nächsten 3 Bit sind der Teil der Adresse, den du über A0-A2 vorgeben kannst. Da die in meinem Beispiel alle drei auf Masse liegen, sind die entsprechenden 3 Bit im Byte auch null. Das letzte Bit steht für lesen oder schreiben. 0 ist lesen, 1 ist schreiben. Da erstmal nur das Temperaturregister gelesen werden soll ist es also auch null. So kommt die 144 zustande. Wenn du z.B. A0-A2 alle auf plus legen würdest, müsste das Byte 10011110 sein bzw. 158. Auf diese Art kannst du bis zu acht ICs mit verschiedenen Adressen versehen (000-111) und jeden einzeln durch ein entsprechendes Byte im Programm rufen. Das ist ja der Witz bei I²C - du kannst verschiedene ICs auf einen Zweidraht-Bus legen und über die verschiedenen Adressen jeden einzeln ansteuern. Als ob jeder eine eingene "Telefonnummer" hätte.
Alles klar?
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 12.09.2006, 20:41 Titel: |
|
|
Es hat Pin 1 erwischt
Soweit schon, aber könntest Du es nicht auf einen Schaltplan so zeigen wie Du es meinst mit den 3 Bits die man vergeben muss.
Cu Andy |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 12.09.2006, 20:58 Titel: |
|
|
Hallo
Viel zeichnen kann ich da nicht. Das steht im Datenblatt:
Das sind die obersten 7Bit des Bytes, das an den LM75 zu Beginn gesendet wird. Das letzte bzw. das unterste (LSB = least significant oder niederwertigste Bit), das hier nicht angegenben ist steht ja für lesen oder schreiben. Wenn du einen der A-Eingänge auf die Betriebsspannung legst, musst du entsprechend eine 1 in diesem Byte eintragen, für die, die auf Masse liegen eine 0 und fertig.
Gruss
Skillronic
EDIT: Pin 1 ist natürlich schlecht... _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.09.2006, 23:40 Titel: |
|
|
Hallo
Ich weiss, keine Doppelposts... Aber KB hat mich auf diesen Link hingewiesen. Da ist alles beschrieben und es gibt auch fertige und vor allem getestete Beispielprogramme.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 18.09.2006, 17:31 Titel: |
|
|
irgendwie funktioniert es nach deiner schaltung nicht. zudem messe ich bei vcc nur 0,56 V.
K.A wieso
Ich hab mal schnell dies zusammengetippt "Wäre nett, wenn jemand mal darüber schauen würde":
Der Code ist für freebasic gedacht:
cls 'Bildschirm löschen
out 1019,64 'Versorgungsspannung für LM75 legen
do 'Schleife beginnt
addieren = 0 'Wert addieren auf Null setzen
addierena = 0 'Wert addierena auf Null setzen
'Master sendet STOP-Bedingung
'Beim ersten Durchlauf hat STOP den Sinn,
'eine definierte Ausgangssituation zu erzeugen.
out 1020,2 'SCL high
out 1020,3 'SDA high
'Master sendet START-Bedingung
'Damit ist unser Gerät LM75 lesebereit.
out 1020,2 'SDA low
out 1020,0 'SCL low
'Master sendet Adress-Byte
'1001 ist der unveränderliche Teil unseres LM75
'Die folgenden drei Bits bestimmen wie wir unsere Leitungen A0/A1/A2 verbunden haben.
'Das letzte Bit gibt an, ob wir lesen oder schreiben wollen.
'Wir wollen lesen, daher 1
FOR i = 1 TO 8
ln$ = "10010001"
e1$ = MID$(ln$, 1, 1)
e2$ = MID$(ln$, 2, 1)
e3$ = MID$(ln$, 3, 1)
e4$ = MID$(ln$, 4, 1)
e5$ = MID$(ln$, 5, 1)
e6$ = MID$(ln$, 6, 1)
e7$ = MID$(ln$, 7, 1)
e8$ = MID$(ln$, 8, 1)
if i = 1 then
if e1$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA low
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
if i = 2 then
if e2$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
if i = 3 then
if e3$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
if i = 4 then
if e4$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
if i = 5 then
if e5$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
if i = 6 then
if e6$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
if i = 7 then
if e7$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
if i = 8 then
if e8$ = "1" then
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 1
CLOSE #1
else
'SDA high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 0
CLOSE #1
end if
'SCL high
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT &H3FC, 2
CLOSE #1
end if
NEXT
'Slave sendet ACKNOWLEDGE
'Start
IF (INP(1022) AND 16) = 16 then
a = a + 1
end if
OUT 1020, 0
CLOSE #1
'Ende
'Das erste Datenbyte lesen
'Bit 1
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 128
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Bit 2
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 64
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Bit 3
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 32
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Bit 4
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 16
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Bit 5
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 8
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Bit 6
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 4
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Bit 7
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 2
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Bit 8
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 16 then
addieren = addieren + 1
else
addieren = addieren + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
'Master sendet Acknowledge
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
OUT 1020, 2
OUT 1020, 0
CLOSE #1
'Slave sendet das zweite Datenbyte
'Bit 1
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 2
CLOSE #1
IF (INP(1022) AND 16) = 64 then
addierena = addierena + 1
else
addierena = addierena + 0
end if
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 0
CLOSE #1
OPEN "COM1:115200,N,8,1" FOR INPUT AS #1
OUT 1020, 1
OUT 1020, 3
OUT 1020, 0
CLOSE #1
locate 1,1
print "LM 75 Testprogramm"
locate 3,0
print a
locate 3,0
print "Binaerzahl:"
locate 3,12
print addieren
loop |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 18.09.2006, 23:24 Titel: |
|
|
Hallo
Andy19312 hat Folgendes geschrieben: | irgendwie funktioniert es nach deiner schaltung nicht. zudem messe ich bei vcc nur 0,56 V.
K.A wieso |
Wieso "zudem"? Wenn nur 0,56V als Versorgungsspannung anliegen, ist mir klar, warum meine Schaltung irgendwie nicht funktioniert. Ich denke mal, du hast ganz einfach die Dioden verkehrt herumeingebaut. Ansonsten sollte sie funktionieren, jedenfalls geht sie beim 24c16 mit I²C-Bus auch. Besser ist sicher die von der Frank Steinberg-Seite,zu der ich den Link gepostet habe. Da ist noch ein Kondensator drin, der scheinbar die Messgenauigkeit verbessert. Sonst ist sie von den Widerstandswerten abgesehen fast die gleiche wie meine, nur die Zenerdioden werden nicht benötigt, weil der LPT ja schon 0 bzw. 5V-Pegel hat.
Dein Programm ist etwas lang, um mal eben drüberzuschauen. Warum benutzt du keine Schleifen? Du könntest den Code sicher auf ein Viertel oder weniger reduzieren. Mein Beispielprogramm enthält ja ein paar Möglichkeiten, wie man es kürzer machen kann. Ausserdem ist die Gefahr solcher Fehler dann geringer:
Code: | IF (INP(1022) AND 16) = 64 then |
Oder warum benutzt du nicht für den Anfang das getestete und funktionierende (!) Programm von der Frank Steinberg-Seite?
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|