danke dir ich versuchs
irgendwie muss ich das ja hinbekommen bei der ganzen hilfe...
vielen dank
danke dir ich versuchs
irgendwie muss ich das ja hinbekommen bei der ganzen hilfe...
vielen dank
da sind sie wieder meine vielen fehler und ich sehe nimmer durch hehe
zuerst der code für die steuerung...
und nun die generic.basCode:'------------Thermometer Modul---------------------- define temp as word 'Messwert (9 bit) define TEMPHI as byte 'oberer Teil define TEMPLO as byte 'unterer Teil const ADR = 158 '(9EH) Adresse=111, LSB=O=W import "C:\DS1631_GENERIC.bas" '----------------------------------------------------- LCD.init 'LCD wird hier bentzt LCD.print "READ DS1631 Temp" LCD.Off 'Bus frei machen für IIC '----------------------------------------------------- DS1631RESET(ADR) 'aus der Bibliothek DS1631SET_STATUS(ADR,1) 'auslesen vorbereiten '----------------------------------------------------- #LOOP pause 5 'Einstellzeit abwarten DS1631CONVERT(ADR) 'DA-Umsetzung starten DS1631WAIT_READY(ADR) 'auf Bereitmeldung warten TEMP=DS1631GET_TEMP(ADR) 'Messwert an Variable LCD.init switchonly 'LCD reaktivieren LCD pos 2,1 'Cursor auf Zeile 2, Pos. 1 TEMP=TEMP shr 7 'Messwert rechtsbündig LCD.print "Temp: " & TEMP/2 & "." & (TEMP and 1) +5 & "C" LCD.off 'Bus wieder frei machen goto LOOP
und nun die fehler welche ich bei meinem wissen nicht zuordnen kann, ich weis in der sache ist mein wissen nicht weit her ^^Code:'DS1631_GENERIC.BAS '-------------------------- IIC.INIT config.init '-------------------------- '------ I/O PORTS --------- '-------------------------- define LIGHT port[16] '-------------------------- '---- SYSTEM MEMORY ------- '-------------------------- define TEMP as word define TEMPHI as byte define TEMPLO as byte DEFINE SDA AS PORT[9] DEFINE SCL AS PORT[10] SDA = ON SCL = ON IIC.init DEFINE pLED1 AS PORT[25] DEFINE pLED2 AS PORT[26] DEFINE pLED3 AS PORT[27] DEFINE pLED4 AS PORT[28] DEFINE pKuehlung AS PORT[29] 'Kuehlung ein / aus DEFINE pSchuetz AS PORT[31] 'Hauptschuetz Ein/Aus DEFINE pKlappenAussen AS PORT[32] 'Aussenklappen Ein/Aus DEFINE pHeizung AS PORT[73] 'Heizung Ein/Aus DEFINE pWarmwasserAuf AS PORT[74] 'Heizung Ein/Aus DEFINE pWarmwasserZu AS PORT[75] 'Heizung Ein/Aus DEFINE pZuluftEin AS PORT[76] 'Zuluft einschalten 80% DEFINE pZuluftHigh AS PORT[77] 'Zuluft maximal 100% DEFINE pAbluftEin AS PORT[78] 'Abluft einschalten 80% DEFINE pAbluftHigh AS PORT[79] 'Abluft maximal 100% DEFINE pAbluftLow AS PORT[80] 'Abluft drosseln 70% pLED1 =OFF pLED2 =OFF pLED3 =OFF pLED4 =OFF pHeizung =OFF pWarmwasserAuf =OFF pWarmwasserZu =OFF pZuluftEin =OFF pZuluftHigh =OFF pAbluftEin =OFF pAbluftHigh =OFF pAbluftLow =OFF
habe dieses bsp. aus der eam ausgabe 14 seite 66Log File für C:\Programme\basicpp2006\compiler\cc.bas
9 Fehler.
"C:\DS1631_GENERIC.bas" 12: Bezeichner kann nicht verwendet werden oder ist mehrfach deklariert. (1)
"C:\DS1631_GENERIC.bas" 13: Bezeichner kann nicht verwendet werden oder ist mehrfach deklariert. (1)
"C:\DS1631_GENERIC.bas" 14: Bezeichner kann nicht verwendet werden oder ist mehrfach deklariert. (1)
"C:\Programme\basicpp2006\compiler\cc.bas" 18: Befehl oder Bezeichner unbekannt. (9)
"C:\Programme\basicpp2006\compiler\cc.bas" 19: Befehl oder Bezeichner unbekannt. (9)
"C:\Programme\basicpp2006\compiler\cc.bas" 26: Befehl oder Bezeichner unbekannt. (9)
"C:\Programme\basicpp2006\compiler\cc.bas" 27: Befehl oder Bezeichner unbekannt. (9)
"C:\Programme\basicpp2006\compiler\cc.bas" 28: Befehl oder Bezeichner unbekannt. (9)
"C:\Programme\basicpp2006\compiler\cc.bas" 31: Befehl oder Bezeichner unbekannt. (9)
Hi,
woher hast du die DS1631_Generic.bas? Wie auf Seite 66 steht, liegt diese im Basic++-Unterverzeichnis "lib" und sieht dann so aus:
Desweiteren schreibt man "sein" Programm in der "Hauptdatei" und bindet nur die benötigten Treiber (hier für den DS1631) ein.Code:'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 'III BASIC++ DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0 IIIII 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII '-------------------------------------------------------------------- ' Beispiel zum BASIC-COMPUTER mit dem Programmer/Application-Board '-------------------------------------------------------------------- ' LIBRARY: COMMON DS1631 CONTROL ROUTINES ' '--------------------------------------------------------------------- 'DS1631RESET(ADDR as byte) RESET 'DS1631CONVERT(ADDR as byte) START CONVERSION 'DS1631GET_STATUS(ADDR as byte) READ STATUS REGISTER,RETURN BYTE 'DS1631SET_STATUS(ADDR as byte,DATA as byte) WRITE STATUS REGISTER 'DS1631GET_TEMP(ADDR as byte) RETURN WORD WITH TEMP '------------------------------------------------------------------- '-------------------------- '--- DS1631 COMMANDS ------ '-------------------------- const CONVERT=51h const STOP_CONVERT=22h const READ_TEMP=AAh const CONF=ACh const RESET=54h '----------------------------------------------------- '------------------ DS1631 RESET ------------------ '----------------------------------------------------- FUNCTION DS1631RESET(ADDR as byte) IIC.INIT IIC.START IIC.SEND ADDR IIC.SEND RESET IIC.STOP IIC.OFF END FUNCTION '----------------------------------------------------- '------------------ DS1631 CONVERT ---------------- '----------------------------------------------------- FUNCTION DS1631CONVERT(ADDR as byte) IIC.INIT IIC.START IIC.SEND ADDR IIC.SEND CONVERT IIC.STOP IIC.OFF END FUNCTION '----------------------------------------------------- '----------------- GET DS1631 STATUS ----------------- '----------------------------------------------------- FUNCTION DS1631GET_STATUS(ADDR as byte) define DATA as byte IIC.INIT IIC.START IIC.SEND ADDR IIC.SEND CONF IIC.STOP IIC.START IIC.SEND (ADDR+1) IIC.GET DATA IIC.STOP IIC.OFF RETURN DATA END FUNCTION '------------------------------------------------------- '----------------- SET DS1631 STATUS ----------------- '------------------------------------------------------- FUNCTION DS1631SET_STATUS(ADDR as byte,DATA as byte) IIC.INIT IIC.START IIC.SEND ADDR IIC.SEND CONF IIC.SEND DATA IIC.STOP END FUNCTION '------------------------------------------------------- '----------------- WAIT DS1631 READY ----------------- '------------------------------------------------------- FUNCTION DS1631WAIT_READY(ADDR as byte) #WT if (DS1631GET_STATUS(ADDR)) and 80h = 0 then goto WT END FUNCTION '----------------------------------------------------- '----------------- GET DS1631 TEMP ----------------- '----------------------------------------------------- FUNCTION DS1631GET_TEMP(ADDR as byte) define TEMP as word define DATA as byte IIC.INIT IIC.START IIC.SEND ADDR IIC.SEND READ_TEMP IIC.STOP IIC.START IIC.SEND (ADDR+1) IIC.GET DATA TEMP=DATA*256 IIC.GET DATA TEMP=TEMP+DATA IIC.STOP IIC.OFF RETURN TEMP END FUNCTION
Dadurch, dass du eine andere Generic.bas verwendest, in der die Variablen doppelt deklariert werden, bekommst du die ersten Fehlermeldungen.
Die restlichen FM erhälst du, weil die im Hauptprog aufgerufenen Funktionen (z.B. DS1631Reset(ADR)) nicht in der importierten Datei enthalten sind.
Weitere Vorgehensweise:
1. Verwende die richtige DS1631_Generic.bas
2. Verwende das Original-Hauptprogramm von Seite 66
3 Bringe dies durch Upload in die C-Control zum Laufen
4. Ändere/Erweitere nach belieben das Hauptprgramm um weitere Funktionen (z.B. 10s Temp anzeigen, 10s Uhrzeit anzeigen)
5. Wenn du dich damit ein wenig vertraut gemacht hast, schreibe das eigentliche Programm...
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
alles gut, danke für deine geduld tido
habe nun nur noch einen fehler aber den werde ich wohl von selber raus bekommen, zumindest versuche ichs solange bis er weg ist ^^
mfg physicus
ps. gibt es eigentlich auch für den TEMPERATURFÜHLER DS18S20 eine generic.bas ?
gefunden habe ich nur andere.
Hi,
nutze mal auf folgenden Seiten die SuFu:
http://ccintern.dharlos.de/
http://www.tappertzhofen.eu/
EDIT: Ok, habe ich selbst mal gemacht und nichts konkretes gefunden...
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
hm ja ich such weiter, die seite von herrn tappertzhofen kenne ich auch schon ne weile
auch schon ohne erfolg dort gesucht, aber ansonsten ist die auch ok
Irgendwie bin ich auch am verzweifeln.
Ich habe noch eine Frage: wie addressiere ich das Thermometer Modul richtig???
Ich hab mir die Lib Datei inzwischen in meine Funktionen eingebaut.
Und ich brauche nur noch die richtige Addresse, nur bei der Auswahl derselben tue ich mich etwas schwer...
Imrahil
*EDIT*
Ich habe mitlerweile folgende Addressen ausprobiert:
145, 147, 149, 151, 153, 155, 157, 159
Keine hat einen brauchbaren Wert zurückgegeben.
Meine Aufrufe:
Code:ADR=159 DS1631RESET(ADR) DS1631SET_STATUS(ADR,1)Letzterer wird mittels Interrupt wiederholt aufgerufen.Code:LCD.Off DS1631CONVERT(ADR) 'DA-Umsetzung starten DS1631WAIT_READY(ADR) 'auf Bereitmeldung warten aussentemp=DS1631GET_TEMP(ADR) 'Messwert an Variable LCD.Init
Vollständiger Quellcode (zu einer Heizungssteuerung, vorsicht, ist vorwiegend unkommentiert):
Hi,
ist schon spät, deshalb habe ich mir den vollständigen Code noch nicht angeschaut.
Warum verwendest du nicht mal zum Testen die Beispiele aus dem Heft???
Zwecks Adressierung solltest du dir noch mal Seite 59 antun, da steht alles wichtige darüber, auch dass die Schreibadresse gerade und die Leseadress ungerade ist. Zum Auslesen des Sensors musst du erst schreibend auf ihn zugreifen (Reset usw.)
LCD.INIT wird normalerweise nur einmal am Programmanfang verwendet, soll das LCD nach einem LCD.OFF erneut aktiviert werden, so schreibt man LCD.SWITCHONLY (das nur am Rande).
Evtl. habe ich morgen mal mehr Zeit...
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
zum Thema Heft: das hab ich nicht
Allerdings bin ich inzwischen auch etwas säuerlich, ich hab immerhin ca 200 euro für eine Station und Sensoren ausgegeben...
Die Dokumentation ist jedenfalls Bullshit.
Die Switchonly anweisung funktioniert jedenfalls nicht (er kennt sie einfach nicht).
Für welche Anweisungen muss ich denn die Schreibaddresse und für welche die Leseaddresse verwenden?
Imrahil
*EDIT*
Ich vergass das wichtigste: danke für die Hilfe
Hi,
habe nicht gesehen, dass du nicht pysikus bist...
Oben in "meiner" Generic.bas stehen alle erforderlichen IIC-Funktionen drin, für ADR ist eine gerade "Schreibadresse" einzugeben. Wird in der Funktion von Chip gelesen, so muss man nichts ändern, da dort (s. Generic.bas) schon z.B.
IIC.SEND (ADDR+1)
programmiert wurde und die Adresse zum Lesen um 1 erhöht wird.
Zum Thema "richtige Adressierung": Im Datenblatt zum 1631 steht, welche Adresse sich abhängig der Pegel an den Ports A0-A2 ergibt.
Bei LCD.SWITCHONLY hat sich der Fehlerteufel eingeschlichen, es fehlt das "INIT":
LCD.INIT switchonly
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Lesezeichen