prblem z programem


mam taki oto program napisany w bascomie i pojawiły się takie problemy: zegarek nie działa, wartości z ds18b20 mam niebotyczne (rzędu kilku tys.), dostęp do menu i poruszanie się po nim działa tak wolno że nawet pospolity ślimak potrafiłby szybciej :/

Prosiłbym o małą pomoc w wytknięciu błędów oraz naprowadzeniu na właściwą drogę.

$regfile = "m16def.dat"
$crystal = 16000000
 
Const Key_nokey = 0
Const Key_set = 1
Const Key_esc = 2
Const Key_up = 3
Const Key_down = 4
Dim Key As Byte
 
Dim Menu As Byte
Dim Menu_1 As Byte
Dim Menu_2 As Byte
Dim Menu_3 As Byte
Dim Menu_4 As Byte
Menu = 1
Menu_1 = 1
Menu_2 = 1
Menu_3 = 2
Menu_4 = 2
 
 
Dim Time_h As Byte
Dim Time_m As Byte
Dim Time_s As Byte
 
Dim Date_d As Byte
Dim Date_m As Byte
Dim Date_r As Byte
 
Dim Date1_d As Byte
Dim Date1_m As Byte
Dim Date1_r As Byte
 
Date_d = 1
Date_m = 1
Date_r = 10
 
Dim Rh As Single
Dim Temp As Single
Dim Temp_r As Byte
Dim Temp_set As Byte
Dim Temp_set1 As Byte
 
Dim Osw_s_h As Byte
Dim Osw_s_m As Byte
Dim Osw_e_h As Byte
Dim Osw_e_m As Byte
 
Dim Pod1_h As Byte
Dim Pod1_m As Byte
Dim Pod1_t As Byte
Dim Pod1_e As Byte
 
Dim Pod2_h As Byte
Dim Pod2_m As Byte
Dim Pod2_t As Byte
Dim Pod2_e As Byte
 
Dim Pod3_h As Byte
Dim Pod3_m As Byte
Dim Pod3_t As Byte
Dim Pod3_e As Byte
 
 
Dim Minuta1 As Word
Dim Minuta2 As Word
Dim Minuta3 As Word
 
Declare Function Show_time(byval Show_h As Byte , Byval Show_m As Byte , Byval Show_s As Byte) As String
Declare Function Show_date(byval Show_d As Byte , Byval Show_m As Byte , Byval Show_y As Byte) As String
Declare Sub Reg_time(byval Yyy As Byte , Byval Xxx As Byte , Byref Hhh As Byte , Byref Mmm As Byte)
 
 
Buzz Alias Portc.0
Buzz = 1
Ddrc.0 = 1
 
 
 
Went Alias Portd.0
Oswi Alias Portd.1
Podl Alias Portd.2
Ogrz Alias Portd.3
Portd = Portd Or &B00001111
Ddrd = Ddrd Or &B00001111
 
Const Refresh = 16000000 / 1024
Compare1a = Refresh
Config Timer1 = Timer , Prescale = 1024
On Compare1a Do_jobs
Enable Compare1a
Enable Interrupts
Dim Ref_temp As Byte
 
 
 
 
Config Scl = Portb.0 
Config Sda = Portb.1  
Config I2cdelay = 5   
I2cinit   
Dim Tm(5) As Byte
 
 
Const Skip_rom = &HCC
Const Convert = &H44
Const Read_sp = &HBE
Const Write_sp = &H4E
Const Copy_sp = &H48
Const Recall_ee = &HB8
Const Search_rom = &HF0
Const Read_rom = &H33
Const Match_rom = &H55
Const Alarm = &HEC
 
Dim Scrachpad(8) As Byte
Dim Tmp As Integer
Dim Wynik As Integer
Config 1wire = Porta.2
 
 
 
 
 
 
 
Dim Ctr As Byte
Dim Dataword As Word
Dim Command As Byte
Dim Dis As String * 20
 
Dim Calc As Single
Dim Calc2 As Single
Dim Rhlinear As Single
Dim Rhlintemp As Single
Dim Tempc As Single
Dim Tempf As Single
 
Const C1 = -4
Const C2 = 0.0405
Const C3 = -0.0000028
Const T1c = .01
Const T2 = .00008
Const T1f = .018
 
Sck Alias Porta.1
Dataout Alias Porta.0
Datain Alias Pina.0
 
 
Ddra.0 = 1
Ddra.1 = 1
 
 
Set Dataout
For Ctr = 1 To 12
 Set Sck
 Waitus 2
 Reset Sck
 Waitus 2
Next Ctr
 
 
 
'*******************************************************************************
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.6 , Rs = Portc.7
Cursor Off
Cls
Locate 1 , 1
Lcd "Sterownik"
Locate 2 , 1
Lcd "szklarni"
Locate 3 , 1
Lcd "Wersja 1.0"
'Wait 1
Cls
 
 
 
 
 
 
 
'*******************************************************************************
Menu_00:
'temperatura wilgotnosć itp
Cls
Do
 
Locate 1 , 1
Lcd Show_time(time_h , Time_m , Time_s) ; " "
Lcd Show_date(date_d , Date_m , Date_r)
 
Locate 2 , 1
Lcd "t:" ; Fusing(temp , "#.##" ) ; " / rh:" ; Fusing(rh , "#.##" )
 
Locate 3 , 1
Lcd "Ośw: " ; Show_time(osw_s_h , Osw_s_m , 255) ; "-"
Lcd Show_time(osw_e_h , Osw_e_m , 255)
 
'Locate 4 , 1
'Lcd "Woda:"
 
Gosub No_key
Gosub Get_key
If Key = Key_set Then Goto Menu_0
Loop
 
'*******************************************************************************
 
 
 
Menu_0:
'menu główne;
Cls
Do
 
Locate 1 , 1
Lcd " Ustaw Data/Godz"
Locate 2 , 1
Lcd " Ustaw Czas Podl"
Locate 3 , 1
Lcd " Ustaw Czas Oswi"
Locate 4 , 1
Lcd " Ustaw Temp"
 
Locate Menu , 1
Lcd ">"
 
 
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_00
If Key = Key_up And Menu < 4 Then Incr Menu
If Key = Key_down And Menu > 1 Then Decr Menu
If Key = Key_set Then
   If Menu = 1 Then Goto Menu_1
   If Menu = 2 Then Goto Menu_2
   If Menu = 3 Then Goto Menu_3
   If Menu = 4 Then Goto Menu_4
End If
 
Loop
'*******************************************************************************
 
 
 
 
Menu_1:
'data_godzina
Cls
Gosub Get_time
Do
 
Locate 1 , 1
Lcd " Ustaw Godzine"
Locate 2 , 1
Lcd " Ustaw Date"
 
 
Locate Menu_1 , 1
Lcd ">"
 
 
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Menu_1 < 2 Then Incr Menu_1
If Key = Key_down And Menu_1 > 1 Then Decr Menu_1
If Key = Key_set Then
   If Menu_1 = 1 Then Goto Menu_11
   If Menu_1 = 2 Then Goto Menu_12
End If
Loop
 
 
 
 
 
 
'*******************************************************************************
Menu_11:
'Ustawianie godziny
Gosub Get_time
Time_s = 0
Cls
Locate 1 , 1
Lcd "Ustaw Godzine"
Locate 2 , 1
Lcd "     :00"
Call Reg_time(2 , 1 , Time_h , Time_m)
Gosub Set_time
Goto Menu_1
 
 
 
 
'*******************************************************************************
Menu_12:
'ustawianie daty
Gosub Get_time
Time_s = 0
Date1_m = Date_m
Date1_r = Date_r
Date1_d = Date_d
 
Cls
Locate 1 , 1
Lcd "Ustaw Dzien"
Do
Locate 2 , 1
Lcd Show_date(date_d , Date_m , Date_r)
 
Gosub No_key_wait
Gosub Get_key
If Key = Key_esc Then Goto Menu_1
If Key = Key_up And Date_d < 31 Then Incr Date_d
If Key = Key_down And Date_d > 0 Then Decr Date_d
If Key = Key_set Then Exit Do
Loop
 
 
 
Cls
Locate 1 , 1
Lcd "Ustaw Miesiac"
Do
Locate 2 , 1
Lcd Show_date(date_d , Date_m , Date_r)
 
Gosub No_key_wait
Gosub Get_key
If Key = Key_esc Then Goto Menu_1
If Key = Key_up And Date_m < 12 Then Incr Date_m
If Key = Key_down And Date_m > 0 Then Decr Date_m
If Key = Key_set Then Exit Do
Loop
 
 
 
 
 
Cls
Locate 1 , 1
Lcd "Ustaw Rok"
Do
Locate 2 , 1
Lcd Show_date(date_d , Date_m , Date_r)
 
Gosub No_key_wait
Gosub Get_key
If Key = Key_esc Then Goto Menu_1
If Key = Key_up And Date_r < 99 Then Incr Date_r
If Key = Key_down And Date_r > 0 Then Decr Date_r
If Key = Key_set Then
   Gosub Get_time
   Date_m = Date1_m
   Date_r = Date1_r
   Date_d = Date1_d
   Gosub Set_time
   Goto Menu_1
End If
Loop
'*******************************************************************************
 
 
 
 
 
 
Menu_2:
'Temperatura
Cls
Do
Locate 1 , 1
Lcd " Ustaw Temperature"
 
 
Locate Menu_2 , 1
Lcd ">"
 
 
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Menu_2 < 1 Then Incr Menu_2
If Key = Key_down And Menu_2 > 1 Then Decr Menu_2
If Key = Key_set Then
   If Menu_2 = 1 Then Goto Menu_21
End If
Loop
'*******************************************************************************
Menu_21:
'Ustawianie Temperatury
Temp_set1 = Temp_set
Cls
Do
Locate 1 , 1
Lcd "Ustaw Temperature"
Locate 2 , 1
Lcd "t: " ; Temp_set ; "C"
 
Gosub No_key_wait
Gosub Get_key
If Key = Key_esc Then Goto Menu_2
If Key = Key_up And Temp_set < 60 Then Incr Temp_set
If Key = Key_down And Temp_set > 0 Then Decr Temp_set
If Key = Key_set Then
   Temp_set = Temp_set1
   Goto Menu_2
End If
Loop
'*******************************************************************************
 
 
 
 
 
Menu_3:
'Oswietlenie
Cls
Do
Locate 1 , 1
Lcd "Oświetlenie"
Locate 2 , 1
Lcd " Wlacz " ; Show_time(osw_s_h , Osw_s_m , 255)
Locate 3 , 1
Lcd " Wylacz " ; Show_time(osw_e_h , Osw_e_m , 255)
 
 
Locate Menu_3 , 1
Lcd ">"
 
 
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Menu_3 < 3 Then Incr Menu_3
If Key = Key_down And Menu_3 > 2 Then Decr Menu_3
If Key = Key_set Then
   If Menu_3 = 2 Then Goto Menu_31
   If Menu_3 = 3 Then Goto Menu_32
End If
 
Loop
'*******************************************************************************
Menu_31:
'Oświetlenie start
Cls
Locate 1 , 1
Lcd "Ustaw Godzine"
Locate 2 , 1
Lcd "Wlaczenia Oswiet"
Call Reg_time(3 , 1 , Osw_s_h , Osw_s_m)
Goto Menu_3
 
 
 
'*******************************************************************************
Menu_32:
'Oświetlenie Stop
Cls
Locate 1 , 1
Lcd "Ustaw Godzine"
Locate 2 , 1
Lcd "Wylaczenia Oswie"
Call Reg_time(3 , 1 , Osw_e_h , Osw_e_m)
Goto Menu_3
'*******************************************************************************
 
 
 
 
 
Menu_4:
'Podlewanie
Cls
Do
 
Locate 1 , 1
Lcd "Podlewanie"
Locate 2 , 1
Lcd " " ; Show_time(pod1_h , Pod1_m , 255) ; " " ; Pod1_t ; "  " ; Pod1_e ; " "
Locate 3 , 1
Lcd " " ; Show_time(pod2_h , Pod2_m , 255) ; " " ; Pod2_t ; "  " ; Pod2_e ; " "
Locate 4 , 1
Lcd " " ; Show_time(pod3_h , Pod3_m , 255) ; " " ; Pod3_t ; "  " ; Pod3_e ; " "
 
Locate Menu_4 , 1
Lcd ">"
 
 
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Menu_4 < 4 Then Incr Menu_4
If Key = Key_down And Menu_4 > 2 Then Decr Menu_4
If Key = Key_set Then
   If Menu_4 = 2 Then Goto Menu_41
   If Menu_4 = 3 Then Goto Menu_42
   If Menu_4 = 3 Then Goto Menu_43
End If
 
Loop
'*******************************************************************************
Menu_41:
'Podlewanie 1
Call Reg_time(2 , 2 , Pod1_h , Pod1_m)
Do
Locate 2 , 8
Lcd Pod1_t ; " "
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Pod1_t < 99 Then Incr Pod1_t
If Key = Key_down And Pod1_t > 0 Then Decr Pod1_t
If Key = Key_set Then Exit Do
Loop
 
Do
Locate 2 , 11
Lcd Pod1_e ; "  "
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Pod1_e < 1 Then Incr Pod1_e
If Key = Key_down And Pod1_e > 0 Then Decr Pod1_e
If Key = Key_set Then Goto Menu_4
Loop
 
 
'*******************************************************************************
Menu_42:
'Podlewanie 2
Call Reg_time(3 , 2 , Pod2_h , Pod2_m)
Do
Locate 3 , 8
Lcd Pod2_t ; " "
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Pod2_t < 99 Then Incr Pod2_t
If Key = Key_down And Pod2_t > 0 Then Decr Pod2_t
If Key = Key_set Then Exit Do
Loop
 
Do
Locate 3 , 11
Lcd Pod2_e ; "  "
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Pod2_e < 1 Then Incr Pod2_e
If Key = Key_down And Pod2_e > 0 Then Decr Pod2_e
If Key = Key_set Then Goto Menu_4
Loop
'*******************************************************************************
Menu_43:
'Podlewanie 3
Call Reg_time(4 , 2 , Pod3_h , Pod3_m)
Do
Locate 4 , 8
Lcd Pod1_t ; " "
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Pod3_t < 99 Then Incr Pod3_t
If Key = Key_down And Pod3_t > 0 Then Decr Pod3_t
If Key = Key_set Then Exit Do
Loop
 
Do
Locate 4 , 11
Lcd Pod3_e ; "  "
Gosub No_key
Gosub Get_key
If Key = Key_esc Then Goto Menu_0
If Key = Key_up And Pod3_e < 1 Then Incr Pod3_e
If Key = Key_down And Pod3_e > 0 Then Decr Pod3_e
If Key = Key_set Then Goto Menu_4
Loop
'*******************************************************************************
'*******************************************************************************
Get_key:
Key = Key_nokey
If Pind.4 = 0 Then Key = Key_esc
If Pind.5 = 0 Then Key = Key_down
If Pind.6 = 0 Then Key = Key_up
If Pind.7 = 0 Then Key = Key_set
Buzz = 0
Waitms 20
Buzz = 1
Return
 
 
 
No_key:
'czeka na puszczenie klawisza
Do
Gosub Get_key
If Key = Key_nokey Then Exit Do
Loop
Return
 
 
No_key_wait:
If Key = Key_esc Or Key = Key_set Then
   Gosub No_key
Else
   Waitms 150
End If
Return
 
 
 
Get_time:
Tm(1) = 2
I2creceive &HA2 , Tm(1) , 1 , 5
Time_s = Makedec(tm(1))
Time_m = Makedec(tm(2))
Time_h = Makedec(tm(3))
Date_d = Makedec(tm(4))
Date_m = Makedec(tm(5))
Return
 
 
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cstart
I2cwbyte 163
I2crbyte Time_s , Ack
I2crbyte Time_m , Ack
I2crbyte Time_h , Ack
I2crbyte Date_d , Ack
I2crbyte Date_m , Nack
I2cstop
Return
 
 
 
 
Do_jobs:
Timer1 = 0
Incr Ref_temp
 
If Ref_temp = 5 Then
   Ref_temp = 0
   Gosub Get_t
   Temp_r = Temp
 
   If Temp_r < Temp_set Then
      Ogrz = 0
   Else
      Ogrz = 1
   End If
 
   If Temp_r > Temp_set Then
      Went = 0
   Else
      Went = 1
   End If
End If
 
 
Gosub Get_time
 
Minuta2 = Time_h * 60
Minuta2 = Minuta2 + Time_m
 
Minuta1 = Osw_s_h * 60
Minuta1 = Minuta1 + Osw_s_m
Minuta3 = Osw_e_h * 60
Minuta3 = Minuta3 + Osw_e_m
If Minuta1 < Minuta2 And Minuta2 < Minuta3 Then
   Oswi = 0
Else
   Oswi = 1
End If
 
Minuta1 = Pod1_h * 60
Minuta1 = Minuta1 + Pod1_m
Minuta3 = Minuta1 + Pod1_t
If Minuta1 < Minuta2 And Minuta2 < Minuta3 And Pod1_e = 1 Then
   Podl = 0
Else
   Podl = 1
End If
 
 
Minuta1 = Pod2_h * 60
Minuta1 = Minuta1 + Pod2_m
Minuta3 = Minuta1 + Pod2_t
If Minuta1 < Minuta2 And Minuta2 < Minuta3 And Pod2_e = 1 Then
   Podl = 0
Else
   Podl = 1
End If
 
Minuta1 = Pod3_h * 60
Minuta1 = Minuta1 + Pod3_m
Minuta3 = Minuta1 + Pod3_t
If Minuta1 < Minuta2 And Minuta2 < Minuta3 And Pod3_e = 1 Then
   Podl = 0
Else
   Podl = 1
End If
 
 
Return
 
 
 
 
 
 
 
Get_t:
1wreset
1wwrite Skip_rom
1wwrite Write_sp
1wwrite 0
1wwrite 0
1wwrite &H7F
 
 
1wreset
1wwrite Skip_rom
1wwrite Convert
'Waitms 800
Waitms 250
 
1wreset
1wwrite Skip_rom
1wwrite Read_sp
 
Scrachpad(1) = 1wread()
Scrachpad(2) = 1wread()
Tmp = Scrachpad(2) * 256
Tmp = Tmp + Scrachpad(1)
Wynik = Tmp * 100
Wynik = Wynik / 16
Temp = Wynik
Return
 
 
Get_rh:
Dim Datavalue As Word
Dim Databyte As Byte
Command = &B00000101
 
 Set Sck
 Reset Dataout
 Reset Sck
 Set Sck
 Set Dataout
 Reset Sck
 
 
 Shiftout Dataout , Sck , Command , 1
 
 Ddra.1 = 0
 Set Sck
 Reset Sck
 Waitus 10
 Bitwait Pinb.1 , Reset
 
 Shiftin Datain , Sck , Databyte , 1
 Datavalue = Databyte
 
 Ddra.1 = 1
 
 Reset Dataout
 Set Sck
 Reset Sck
 
 Ddra.1 = 0
 
 Shiftin Datain , Sck , Databyte , 1
 Shift Datavalue , Left , 8
 Datavalue = Datavalue Or Databyte
 Dataword = Datavalue
 
 Ddra.1 = 1
 
 Reset Dataout
 Set Sck
 Reset Sck
 
 Ddra.1 = 0
 
 Shiftin Datain , Sck , Databyte , 1
 
 Ddra.1 = 1
 
 Set Dataout
 Set Sck
 Reset Sck
 
 
 
 Calc = C2 * Dataword
 Calc2 = Dataword * Dataword
 Calc2 = C3 * Calc2
 Calc = Calc + C1
 Rhlinear = Calc + Calc2
 
 
 Calc = T2 * Dataword
 Calc = Calc + T1c
 Calc2 = Tempc - 25
 Calc = Calc2 * Calc
 Rhlintemp = Calc + Rhlinear
 
 Rh = Rhlintemp
Return
 
 
 
 
Function Show_time(byval Show_h As Byte , Byval Show_m As Byte , Byval Show_s As Byte)
Show_time = ""
If Show_h < 10 Then Show_time = Show_time + "0"
Show_time = Show_time + Str(show_h)
Show_time = Show_time + ":"
If Show_m < 10 Then Show_time = Show_time + "0"
Show_time = Show_time + Str(show_m)
 
If Show_s < 60 Then
Show_time = Show_time + ":"
If Show_s < 10 Then Show_time = Show_time + "0"
Show_time = Show_time + Str(show_s)
End If
End Function
 
 
Function Show_date(byval Show_y As Byte , Byval Show_m As Byte , Byval Show_d As Byte)
Show_date = ""
If Show_d < 10 Then Show_date = Show_date + "0"
Show_date = Show_date + Str(show_d)
Show_date = Show_date + "/"
If Show_m < 10 Then Show_date = Show_date + "0"
Show_date = Show_date + Str(show_m)
Show_date = Show_date + "/"
If Show_y < 10 Then Show_date = Show_date + "0"
Show_date = Show_date + Str(show_y)
End Function
 
 
Sub Reg_time(byval Yyy As Byte , Byval Xxx As Byte , Byref Hhh As Byte , Byref Mmm As Byte)
Local H As Byte
Local M As Byte
Local T As Byte
Local Xxx2 As Byte
H = Hhh
M = Mmm
Xxx2 = Xxx + 3
 
Do
Locate Yyy , Xxx
Lcd Show_time(h , M , 255)
If T = 0 Then
   Locate Yyy , Xxx
   Lcd "  "
End If
Gosub No_key_wait
Gosub Get_key
If Key = Key_esc Then Exit Sub
If Key = Key_up And H < 23 Then Incr H
If Key = Key_down And H > 0 Then Decr H
If Key = Key_set Then Exit Do
Incr T
If T = 2 Then T = 0
Loop
 
 
Do
Locate Yyy , Xxx
Lcd Show_time(time_h , Time_m , 255)
If T = 0 Then
   Locate Yyy , Xxx2
   Lcd "  "
End If
Gosub No_key_wait
Gosub Get_key
If Key = Key_esc Then Exit Sub
If Key = Key_up And M < 59 Then Incr M
If Key = Key_down And M > 0 Then Decr M
If Key = Key_set Then
   Exit Do
End If
Incr T
If T = 2 Then T = 0
Loop
 
Mmm = M
Hhh = H
End Sub




Portret użytkownika mirley

Re: Program

A ustawiłeś fusebity w M16? nie wiem czy w układzie jest zewnętrzny kwarc ale raczej napewno bo na początku zadeklarowana jest czętotliwość 16MHz, to jedyna przyczyna dla której może być za wolne działanie. Jeśli jest zewnętrzny kwarc to trzeba procesor przestawić żeby z niego korzystał. Nowy procesor działa 1MHZ nie zależnie czy ma kwarc czy nie ma a to wyjaśniało by wolne działanie i problem z komunikacją po I2C z zegarem RTC

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika samayel

fusy mam ustawione tak jak

fusy mam ustawione tak jak tutaj Klik więc raczej wszystko jest w porządku

-

my own way... sia la la sia lalalala ;]

Portret użytkownika mirley

Re: Problemy M16

Jeszcze może być brak rezystorów przy I2C i brak rezystora przy ds18B20, dodatkowo za małe opóźnienie DS18B20 między konwersją temperatury a odczytem.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika samayel

rezystory na i2c i ds'ie jak

rezystory na i2c i ds'ie jak najbardziej są (po 3,3k)

w razie czego podaje schemat: Schemat

-

my own way... sia la la sia lalalala ;]

Portret użytkownika mirley

Re: Program

Spróbuj mojego fragmentu programu z kodów źródłowych odnośnie ds18b20, jeśli zadziała to znaczy że sprzęt masz dobrze zlutowany. Ogólnie programu który zamieściłeś nie da się ogarnąć.. jest za dużo odwołań z jednego miejsca do drugiego...ja nie daję rady zobaczyć co jest nie tak

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika samayel

z ds18b20 już się uporałem :)

z ds18b20 już się uporałem :) pozostaje tylko kwestia PCF8583, którego nie moge ruszyć.
Na razie kombinuje z samym zegarkiem (główny program na dalszym planie)
po wgraniu tego programiku godzina się nie zmienia, ciągle "wisi" na jednej, co może być nie tak?

$regfile = "m16def.dat"
$crystal = 16000000
 
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.6 , Rs = Portc.7
Cursor Off
Cls
 
Config Scl = Portb.0
Config Sda = Portb.1
 
 
Dim M As Byte
Dim S As Byte
Dim H As Byte
'Dim Dzien As Byte
'Dim Mo As Byte
'Dim Ro As Integer
 
Cls
 
'H = Makebcd(15)
'M = Makebcd(00)
'S = Makebcd(00)
 
 
'Dzien = Makebcd(13)
'Mo = Makebcd(1)
'Ro = 2010
'I2cstart
'I2cwbyte 162
'I2cwbyte 0
'I2cwbyte 8
'I2cstop
'I2cstart
'I2cwbyte 162
'I2cwbyte 2
'I2cwbyte S
'I2cwbyte M
'I2cwbyte H
'I2cwbyte Dzien
'I2cwbyte Mo
'I2cstop
 
 
 
Do
 
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cstart
I2cwbyte 163
I2crbyte S , Ack
I2crbyte M , Ack
I2crbyte H , Nack
I2cstop
 
S = Makedec(s)
M = Makedec(m)
H = Makedec(h)
 
Locate 1 , 1
Lcd H ; ":" ; M ; ":" ; S ; "   "
 
Loop
End

-

my own way... sia la la sia lalalala ;]

Portret użytkownika mirley

Re: Zegar RTC

Brakuje Ci:

I2cinit

zaraz po config Sda a także w pętli głównej po komendzie Lcd dodaj jeszcze:

waitms 400 

lub coś podobnego.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika samayel

po dodaniu i2cinit i waitms

po dodaniu

i2cinit

i
waitms 400

mam coś takiego: na starcie godzina 0:0:0 po 400ms zmienia się na 0:0:1 i później znowu na 0:0:0 i tak w kółko

-

my own way... sia la la sia lalalala ;]

Portret użytkownika mirley

Re:

Musi być I2cinit bo bez tego nie pójdzie i2C. Popatrz jeszcze na swój schemat i elementy wokół PCF'a, porównaj z moim schematem bo nie pasuje mi kilka rzeczy na twoim: http://mirley.firlej.org/prosty_sterownik_domowy Przede wszystkim pin A0 ustalający adres nie jest do niczego podłączony stało-prądowo

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika samayel

I2cinit jak pisałem wcześniej

I2cinit jak pisałem wcześniej dodałem do kodu, i faktycznie był błąd na moim schemacie ale już poprawiłem ( Schemat ) ale mimo wszystko po zaprogramowania uC mam taki sam wałek :/ (0:0:0 , 0:0:1 , 0:0:0 i tak w kółko)

-

my own way... sia la la sia lalalala ;]

Portret użytkownika mirley

Re: Program

Jest jeszcze jedno wyjście. Spróbuj wgrać jeden z moich programów... np ten od prostego sterownika domowego. jest tam obsługa zegara PCF i na wyświetlaczu powinieneś zobaczysz wyświetlany czas. Wystarczy że na początku programu pozmieniasz piny do których masz podłączony PCF i wyprowadzenia wyświetlacza. jeśli zegar zadziała to powalczymy z programem, jeśli nie zadziała to jest dalej problem na płytce i trzeba go rozwiązać

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.