Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

LM75
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 04.09.2006, 17:47    Titel: LM75 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
OdinX



Anmeldungsdatum: 29.07.2005
Beiträge: 253
Wohnort: SG Schweiz

BeitragVerfasst am: 04.09.2006, 18:40    Titel: Antworten mit Zitat

nimm die stelle ganz links im binärcode als corzeichen.

1 ist minus und 0 ist plus oder umgekehrt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 05.09.2006, 12:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 05.09.2006, 18:17    Titel: Antworten mit Zitat

°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
Benutzer-Profile anzeigen Private Nachricht senden
Kai Bareis



Anmeldungsdatum: 10.09.2004
Beiträge: 545
Wohnort: Baden Würtemberg

BeitragVerfasst am: 05.09.2006, 20:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 06.09.2006, 07:00    Titel: Antworten mit Zitat

also liege ich damit richig, dass ich 9 Bit erhalte
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 06.09.2006, 10:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 11.09.2006, 16:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 11.09.2006, 16:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 11.09.2006, 17:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 11.09.2006, 17:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 11.09.2006, 18:20    Titel: Antworten mit Zitat

hat von euch einer ein fertiges Programm für die serielle Schnittstelle.

Cu Andy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 11.09.2006, 23:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 12.09.2006, 12:49    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 12.09.2006, 20:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 12.09.2006, 20:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 12.09.2006, 20:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 14.09.2006, 23:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 18.09.2006, 17:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.09.2006, 23:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz