Forum: Mikrocontroller und Digitale Elektronik RTC Minute getrennt lesen Bascom


von Xash (Gast)


Lesenswert?

Hallo

Ich möchte mit Bascom eines DS1307 die Stunden, Minuten, Sekunden 
getrennt auslesen und diese mit einer Select Case Abfrage auswerten.
Leider geht das nicht so wie ich es gemacht habe

Hier der Select Case code und unten das Standartprogramm des DS1307 (Die 
Zeit kann ich ohne Probleme lesen und auf ein LCD schreiben, nur das 
Splitten bekomme ich nicht hin)
1
Select Case _hour
2
 Case 1 : Goto Eins
3
 Case 2 : Goto Zwei
4
 Case 3 : Goto Drei
5
 Case 4 : Goto Vier
6
 Case 5 : Goto Fuenf
7
 Case 6 : Goto Sechs
8
 Case 7 : Goto Sieben
9
 Case 8 : Goto Acht
10
 Case 9 : Goto Neun
11
End Select
1
Dim Weekday As Byte
2
Getdatetime:
3
  I2cstart
4
  I2cwbyte Ds1307w
5
  I2cwbyte 0
6
  I2cstart
7
  I2cwbyte Ds1307r
8
  I2crbyte _sec , Ack
9
  I2crbyte _min , Ack
10
  I2crbyte _hour , Ack
11
  I2crbyte Weekday , Ack
12
  I2crbyte _day , Ack
13
  I2crbyte _month , Ack
14
  I2crbyte _year , Nack
15
  I2cstop
16
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
17
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
18
Return
19
20
Setdate:
21
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
22
  I2cstart
23
  I2cwbyte Ds1307w
24
  I2cwbyte 4
25
  I2cwbyte _day
26
  I2cwbyte _month
27
  I2cwbyte _year
28
  I2cstop
29
Return
30
31
Settime:
32
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
33
  I2cstart
34
  I2cwbyte Ds1307w
35
  I2cwbyte 0
36
  I2cwbyte _sec
37
  I2cwbyte _min
38
  I2cwbyte _hour
39
  I2cstop
40
Return
41
42
End

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Xash schrieb:
> Die Zeit kann ich ohne Probleme lesen und auf ein LCD schreiben,
Gut so.
> nur das Splitten bekomme ich nicht hin
Welches Splitten denn?

Was ist denn genau dein Problem?
Aus dem Titel könnte man was raten:
>>> RTC Minute getrennt lesen Bascom
Aber die Minuten hast du ja schon:
> _min = Makedec(_min)
Also hast du offenbar ein anderes Problem...

von Xash (Gast)


Lesenswert?

Wie im Code oben möchte ich zu dem entsprechenden Unterprogramm 
springen, wenn die jeweilige Zahl in der Stunde, Minute oder Sekunde 
vorhanden ist.

Ich vermute mal, dass ich nicht die _hour, _min, _sec einfach so wie in 
meiner Select Case Abfrage abfragen kann.
Muss ich den Wert erst noch in einen anderen Datenty wandeln um ihn so 
abfragen zu können?

von Xash (Gast)


Angehängte Dateien:

Lesenswert?

diese fehler spuckt er aus

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Xash schrieb:
> Wie im Code oben möchte ich zu dem entsprechenden Unterprogramm
> springen
Warum willst du da so hin- und herspringen?
Was passiert da in dem Unterprogramm?
Was machen diese Unterprogramme?
Ich vermute: alle fas das selbe...

BTW: Unterprogramme werden nicht angesprungen (mit GOTO) sondern 
aufgerufen (mit GOSUB)...

Bleibt noch die Frage
Lothar Miller schrieb:
> Was ist denn genau dein Problem?

EDIT:
Xash schrieb:
> diese fehler spuckt er aus
Mann! Blöde Salamitaktik!
Du hattest bisher noch niemals von solchen Fehlern was gesagt...
In dem von dir geposteten Code gibt es keine Zeile 242.
Wie soll man da helfen können?

EDIT2:
Texte müssen nicht als Bild angehängt werden. Die kann man kopieren und 
in den Text einfügen...

von Xash (Gast)


Lesenswert?

Hallo

Den Fehlercode kann ich nicht kopieren.

Danke für die "Hilfe".
Ich frage hier jemanden vor Ort!


-closed-

von Dieter B. (debe)


Lesenswert?

Xash schrieb:
> Hallo
>
> Den Fehlercode kann ich nicht kopieren.
>


Hallo

Der fehlercode steht in der Datei *.err


Gruß debe

von Xash (Gast)


Lesenswert?

Wie kommt denn sowas zustande:


[code]
Error : 222   Line :   209   Illegal character [expected (, got '' 
[_XMEGA]]  , in File : C:\temp\test\test.bas
Error : 222   Line :   209   Illegal character [expected (, got '=' 
[_XMEGA=0]]  , in File : C:\temp\test\test.bas
Error : 222   Line :   209   Illegal character [expected (, got '' 
[_XMEGA]]  , in File : C:\temp\test\test.bas
Error : 222   Line :   209   Illegal character [expected (, got '=' 
[_XMEGA=0]]  , in File : C:\temp\test\test.bas
Error : 238   Line :   209   Variable is not dimensioned as an array 
[_XMEGAREG(1)]  , in File : C:\temp\test\test.bas
Error : 263   Line :   209   Array index out of range [1]  , in File : 
C:\temp\test\test.bas
Error : 104   Line :   209   LoadReg error [_XMEGAREG(1)]  , in File : 
C:\temp\test\test.bas
Error : 5     Line :   209   No more space for BIT [_XMEGAREG(1)]  , in 
File : C:\temp\test\test.bas
Error : 5     Line :   209   No more space for BIT [_XMEGAREG(1)+1]  , 
in File : C:\temp\test\test.bas
Error : 5     Line :   209   No more space for BIT [_XMEGAREG(1)+2]  , 
in File : C:\temp\test\test.bas
Error : 320   Line :   209    [syntax error, token = '{']  , in File : 
C:\temp\test\test.bas
Error : 320   Line :   209    [syntax error, token = '{']  , in File : 
C:\temp\test\test.bas
Error : 320   Line :   209    [syntax error, token = '{']  , in File : 
C:\temp\test\test.bas

[\code]

Die Zeile 209 gibts gar nicht mehr in meinem Programm. Das Programm geht 
nur bis 208.


Das ist mein Programm

[code]
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600


Config Porta = Output


Config Sda = Portc.1                                        ' I2C Bus 
konfigurieren
Config Scl = Portc.0
Const Ds1307w = &HD0                                        ' Addresse 
der Ds1307 Uhr
Const Ds1307r = &HD1

Config Clock = User                                         ' Interne 
Time/Date Routinen für Bascom konfigurieren
Config Date = Dmy , Separator = .

Time$ = "09:00:00"
Date$ = "24.02.11"


Dim _ta As Integer

_ta = 1

If _ta = 1 Then
   Porta = 0
   Waitus 250
   Porta = 0
   Waitus 250
   Porta = 0
   Waitus 250
   Porta = 255
   Waitus 250
   Porta = 0
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 2 Then
   Porta = 159
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 241
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 3 Then
   Porta = 255
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 129
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 4 Then
   Porta = 240
   Waitus 250
   Porta = 16
   Waitus 250
   Porta = 16
   Waitus 250
   Porta = 63
   Waitus 250
   Porta = 16
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 5 Then
   Porta = 241
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 159
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 6 Then
   Porta = 255
   Waitus 250
   Porta = 137
   Waitus 250
   Porta = 137
   Waitus 250
   Porta = 137
   Waitus 250
   Porta = 143
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 7 Then
   Porta = 128
   Waitus 250
   Porta = 128
   Waitus 250
   Porta = 128
   Waitus 250
   Porta = 128
   Waitus 250
   Porta = 255
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 8 Then
   Porta = 255
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 145
   Waitus 250
   Porta = 255
   Waitus 250
   Porta = 0
   Waitus 250
Elseif _ta = 9 Then
   Porta = 241
   Waitus 250
   Porta = 241
   Waitus 250
   Porta = 241
   Waitus 250
   Porta = 241
   Waitus 250
   Porta = 241
   Waitus 250
   Porta = 255
   Waitus 250
   Porta = 0
   Waitus 250
End If



'   Punkt:
'   Porta = 0
'   Waitus 250
'   Porta = 1
'   Waitus 250
'   Porta = 0
'   Waitus 250


'   Doppelpunkt:
'   Porta = 0
'   Waitus 250
'   Porta = 36
'   Waitus 250
'   Porta = 0
'   Waitus 250


Dim Weekday As Byte
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 , Nack
  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

End
[\code]

von Xash (Gast)


Lesenswert?

Wenn ich das hier ausklammere, dann sind die Fehler weg:

[code]
'Time$ = "09:00:00"
'Date$ = "24.02.11"
[\code]

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.