Strona 1 z 2
DS1307+wysw. OLED
: 22 sty 2018, 21:04
autor: marekszy
Bartek, czekam na wyświetlacz OLED 0,96 i tak się zastanawiam jak to podpiąć pod ATmega32 razem z DS1307 .
Widziałem ,że bawiłeś się nim na Twojej stronie, więc jak możesz i znajdziesz czas to napisz jak to podłączyłeś i ewntualnie poproszę ten kod ?
Re: DS1307+wysw. OLED
: 22 sty 2018, 21:57
autor: Pikczu
Kod jest w dziale biblioteki :
viewtopic.php?f=13&t=40
pięknie rozpisane na poszczególne funkcje, nic tylko brać i wklejać (dosłownie bo prościej tego już zrobic nie można).
kod do wyświetlacza jest na forum MCS w wątku Mirshlova o wyświetlaczach.
https://www.mcselec.com/index2.php?opti ... ic&t=13074
Wystarczy ruszyć głowa i posklejać do kupy.
Re: DS1307+wysw. OLED
: 22 sty 2018, 22:15
autor: marekszy
Z obsługą DS1307 to nie mam problemu ,tylko jak to spiąć razem z wyswietlaczem , oba pracują na SCK/SDA
Re: DS1307+wysw. OLED
: 22 sty 2018, 22:41
autor: pimowo
Na i2c możesz spiąć wiele urządzeń
Re: DS1307+wysw. OLED
: 23 sty 2018, 2:20
autor: kulamario
Musisz sobie zdefiniować adresy poszczególnych urządzeń tego Oled-a i zegarka adresy wybiera się po przez zwarcie pinów A0,A1,A2 do masy lub do plusa
tak jak tu kolega pimowo nadmienił na i2c może chodzić wiele urządzeń nie tylko jedno
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0 'ZL3AVR
Config Lcd = 20x4
Cursor Off
Cls
Initlcd
Dim Adres As Byte
Config Sda = Portc.1
Config Scl = Portc.0
Cursor Off
Cls
Lcd " TEST BUS I2C "
Wait 2
Cls
For Adres = 0 To 200
I2cstart
I2cwbyte Adres
I2cstop
If Err = 0 Then
Err = 1
Cls
Locate 1 , 1
Lcd "Adres: " ; Adres
Wait 2
End If
Next Adres
Cls
Locate 1 , 1
Lcd " Koniec "
tu masz taki prosty skaner i2c pokaże ci adresy poszczególnych urządzeń
Re: DS1307+wysw. OLED
: 23 sty 2018, 9:52
autor: marekszy
Dzięki, zaczynam rozumiec, tylko o co chodzi z tym zwieraniem "adresy wybiera się po przez zwarcie pinów A0,A1,A2 do masy lub do plusa "
Re: DS1307+wysw. OLED
: 23 sty 2018, 13:37
autor: kulamario
Jak już wiesz możesz kilka układów podłączyć pod i2c
ale co jeśli chcemy podłączyć np 2 lub więcej sztuk takiego AT24C64
jeśli podłączymy wszystkie piny "A" tak samo czyli np 3 układach wszystkie damy do masy to wszystkie układy będą miały taki sam adres i co za tym idzie będą widziane jako jeden układ a nie 3 różne ale jeśli damy np w pierwszym układzie A0 na masę w drugim układzie A1 na masę a w trzecim układzie A3 to procesorek zobaczy wszystkie 3 układy na innych adresach co za tym idzie będziesz mógł komunikować się z każdym z osobna
Te piny A0,A1,A2 służą jako takie jak by przełączniki nie wiem co masz tam w domu za uklady ale nawet jak masz tylko tego DS-a to możesz sobie to bez problemu przetestować
Re: DS1307+wysw. OLED
: 23 sty 2018, 20:05
autor: marekszy
Teraz jasne skąd te A0/A1/A2 ,ustawiasz adres AT24C64, ds1307 i wyświetlacz mają stałe adresy także nie zaskoczyłem.
Ale właśnie chciałem kawałek kodu jak przypisać adresy już w programie do danego urządzenia.
Re: DS1307+wysw. OLED
: 23 sty 2018, 20:24
autor: kulamario
tu masz przykład z PCF8583 jak są ustawione adresy
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cstart
I2cwbyte 163
I2crbyte Sekundy , Ack
I2crbyte Minuty , Ack
I2crbyte Godziny , Ack
I2crbyte Dzien , Ack
I2crbyte Miesiac , Nack
I2cstop
Re: DS1307+wysw. OLED
: 23 sty 2018, 20:39
autor: niveasoft
Pisałem soft do tej czasówki. Cztery kanały czasowe albo manual włącz wyłącz. W tym zegar RTC DS3231 ale kod do DS1307 jest identyczny.
Do tego jest dedykowana aplikacja na Android
Musisz mieć bibliotekę do tego OLED`a. Adres do OLED jest na stałe wpisany w bibliotece dlatego adresu OLED`a się nie ustawia.
Musisz zaimportować do swojego kodu FONT (lub więcej fontów).
Wyświetlacz sam w sobie nie ma wbudowanych.
W folderze sampli do Bascom jest przykład i fonty.
Po użyciu tego kodu używasz normalnych Bascomowych komend "Time$" albo "Date$"
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 32
$framesize = 128
$baud = 9600
Config Submode = New
'*****************************************************************
'* CONFIG FOR HARDWARE TWI (I2C) *
'*****************************************************************
$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI
Config Scl = Portc.5 ' used i2c pins
Config Sda = Portc.4
Config Twi = 400000 ' i2c speed
I2cinit
'*****************************************************************
'* OLED CONFIG *
'*****************************************************************
$lib "glcdSSD1306-I2C.lib" ' override the default lib with this special one
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
Cls
'*****************************************************************
'* TIMER2 CONFIG FOR TIME BASE *
'*****************************************************************
Config Timer2 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
Compare2a = 77 '10ms @8MHz/1024
'*****************************************************************
'* CONFIG FOR DS3231 I2C CLOCK (RTC) *
'*****************************************************************
Config Clock = User
Config Date = Dmy , Separator = Minus
'address of ds3231
Const Ds3231w = &HD0
Const Ds3231r = &HD1
Dim Weekday As Byte , Old_day As Byte , Weekday_str As String * 10
Dim Time_str As String * 10 , Old_sec As Byte
Dim I2c_err As Byte , 100ms As Byte
Do
Loop
Getdatetime:
I2cstart ' Generate start code
I2cwbyte Ds3231w ' send address
If Err = 1 Then
I2c_err = 1 : Return
Else
I2c_err = 0
End If
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds3231r ' send address
I2crbyte _sec , Ack
I2crbyte _min , Ack ' MINUTES
I2crbyte _hour , Ack ' Hours
I2crbyte Weekday , Ack ' Day of Week
I2crbyte _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
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 ' Generate start code
I2cwbyte Ds3231w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte _day ' Send Data to SECONDS
I2cwbyte _month ' MINUTES
I2cwbyte _year ' Hours
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate start code
I2cwbyte Ds3231w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte _sec ' Send Data to SECONDS
I2cwbyte _min ' MINUTES
I2cwbyte _hour ' Hours
I2cstop
Return