PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RTC



Kampi
21.01.2010, 21:14
Hallo

Ich hab hier ein Programm welches eine RTC + ein EEPROM im I²C ansteuert.
Jedesmal wenn ich den Code kompilieren will schreibt Bascom allerdings:

Error: 1 Line: 82 Label not fount [GETDATETIME ]

Woran liegt das?

Achja hier der Code



$regfile = "m32def.dat"
$crystal = 16000000

Const Ds1307w = &HD0
Const Ds1307r = &HD1

Dim Zeit As String * 10
Dim Datum As String * 10
Dim Eingabe As String * 2

Config Clock = User
Dim Weekday As Byte

Start:
Input "Zeit und Datum stellen? (y/n):" , Eingabe

If Eingabe = "y" Then

Input "Time hh:mm:ss: " , Zeit
Input "Date mm-dd-yy" , Datum


Time$ = Zeit
Date$ = Datum

End If

Do
Print "Date Time :" ; Date$ ; "" ; Time$
Wait 1
Loop

Sub_getdatetime

I2cstart
I2cwbyte Ds1307w
I2cwbyte 0

I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Ack
I2cstop

_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)

Return

Setdate:

_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)

I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)

I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop

Return

PICture
21.01.2010, 21:27
Hallo!

Ich kenne zwar BASCOM nicht, aber bei jeder Programmiersprache ist jedes Zeichen vom Compiler so angenommen, wie definiert.

Deswegen wenn du irgendwo eine Sub_GETDATETIME aufrufst und Sub_getdatetime definiert hast, findet der Compiler die grossgeschriebene Sub im deinem Programm natürlich nicht.

MfG

peterfido
21.01.2010, 21:32
Es wird eine Sub getdatetime vermisst. Evtl wird diese durch eine LIB aufgerufen.

Im Zweifel einfach


getdatetime:
return
am Ende vom Programm einfügen und schauen, ob es geht.

edit:
Bascom unterscheidet nicht zwischen Groß- und Kleinschreibung.
In der IDE wird eher der erste buchstabe immer (automatisch) Großgeschrieben und der Rest klein. Eine Variable "lngZeit" wird automatisch zu "Lngzeit".

Michael
21.01.2010, 21:34
Hallo Kampi,

Sub_Getdatetime -> ohne Sub und ohne Unterstrich, stattdessen einfach Getdatetime:. Groß- oder Kleinschreibung spielt keine Rolle.

Gruß, Michael

PICture
21.01.2010, 21:58
Hallo!

@ Michael

Danke für dein wichtiges Info, da ich als PIC-Benutzer und ASM-Freak ernst überlege, wegen Zeitersparnis beim Erstellung von unfangreichen "langsamen" Programmen, zukünftige Verwendung vom AVRs mit BASCOM und eventuellen ASM-Funktionen. :)

Früher habe ich auf diese Weise andere Prozessoren noch unter DOS in Q-BASIC Programmiert und BASCOM scheint mir sehr ännlich zu sein.

MfG

Kampi
21.01.2010, 22:01
Danke es funktioniert nun....also das kompilieren :D
Da musste echt nur das Sub und der Unterstrich weg. Komisch eigentlich weil ich hab das 1 zu 1 aus dem Buch abgeschrieben aber naja :D

Edit: So hab das nun getestet und er fragt mich nach dem Datum und der Zeit aber danach kommt nichts mehr? Also die Zeit geht nicht weiter. Heißt das das IC oder der Quarz ist kaputt?

Lg

Jaecko
21.01.2010, 23:04
In der IDE wird eher der erste buchstabe immer (automatisch) Großgeschrieben und der Rest klein. Eine Variable "lngZeit" wird automatisch zu "Lngzeit".

Diese "Krankheit" kann man aber zum Glück abstellen.
Wie der Punkt genau heisst, weiss ich grad nicht. Glaub sogar irgendwas mit "Case".