danke dir ich versuchs :)
irgendwie muss ich das ja hinbekommen bei der ganzen hilfe...
vielen dank
Druckbare Version
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 66Zitat:
Log 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...
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... ](*,)
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...
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