DS1307+wysw. OLED
-
- Posty: 112
- Rejestracja: 20 lis 2016, 20:21
DS1307+wysw. OLED
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 ?
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 ?
- Pikczu
- Posty: 392
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: DS1307+wysw. OLED
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.
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.
-
- Posty: 112
- Rejestracja: 20 lis 2016, 20:21
Re: DS1307+wysw. OLED
Z obsługą DS1307 to nie mam problemu ,tylko jak to spiąć razem z wyswietlaczem , oba pracują na SCK/SDA
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
Re: DS1307+wysw. OLED
Na i2c możesz spiąć wiele urządzeń
- kulamario
- Posty: 207
- Rejestracja: 17 sie 2015, 20:05
- Lokalizacja: Greystones
- Kontakt:
Re: DS1307+wysw. OLED
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
tu masz taki prosty skaner i2c pokaże ci adresy poszczególnych urządzeń
tak jak tu kolega pimowo nadmienił na i2c może chodzić wiele urządzeń nie tylko jedno
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $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 "
-
- Posty: 112
- Rejestracja: 20 lis 2016, 20:21
Re: DS1307+wysw. OLED
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 "
- kulamario
- Posty: 207
- Rejestracja: 17 sie 2015, 20:05
- Lokalizacja: Greystones
- Kontakt:
Re: DS1307+wysw. OLED
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ć
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ć
-
- Posty: 112
- Rejestracja: 20 lis 2016, 20:21
Re: DS1307+wysw. OLED
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.
Ale właśnie chciałem kawałek kodu jak przypisać adresy już w programie do danego urządzenia.
- kulamario
- Posty: 207
- Rejestracja: 17 sie 2015, 20:05
- Lokalizacja: Greystones
- Kontakt:
Re: DS1307+wysw. OLED
tu masz przykład z PCF8583 jak są ustawione adresy
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- I2cstart
- I2cwbyte 162
- I2cwbyte 2
- I2cstart
- I2cwbyte 163
- I2crbyte Sekundy , Ack
- I2crbyte Minuty , Ack
- I2crbyte Godziny , Ack
- I2crbyte Dzien , Ack
- I2crbyte Miesiac , Nack
- I2cstop
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: DS1307+wysw. OLED
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$"
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$"
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $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
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.