DS1307+wysw. OLED

Pytania, kody i porady dotyczące nie tylko Bascom.
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

DS1307+wysw. OLED

Post autor: marekszy » 22 sty 2018, 21:04

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 ?
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: DS1307+wysw. OLED

Post autor: Pikczu » 22 sty 2018, 21:57

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.
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

Re: DS1307+wysw. OLED

Post autor: marekszy » 22 sty 2018, 22:15

Z obsługą DS1307 to nie mam problemu ,tylko jak to spiąć razem z wyswietlaczem , oba pracują na SCK/SDA
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: DS1307+wysw. OLED

Post autor: pimowo » 22 sty 2018, 22:41

Na i2c możesz spiąć wiele urządzeń ;)
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: DS1307+wysw. OLED

Post autor: kulamario » 23 sty 2018, 2:20

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
  1. $regfile = "m32def.dat"
  2. $crystal = 16000000
  3.  
  4.  
  5. Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0       'ZL3AVR
  6. Config Lcd = 20x4
  7.  
  8.  
  9. Cursor Off
  10. Cls
  11.  
  12. Initlcd
  13.  
  14.  
  15. Dim Adres As Byte
  16.  
  17.  
  18. Config Sda = Portc.1
  19. Config Scl = Portc.0
  20.  
  21.  
  22. Cursor Off
  23.  
  24. Cls
  25. Lcd "    TEST BUS I2C   "
  26. Wait 2
  27. Cls
  28.  
  29. For Adres = 0 To 200
  30. I2cstart
  31. I2cwbyte Adres
  32. I2cstop
  33. If Err = 0 Then
  34. Err = 1
  35. Cls
  36. Locate 1 , 1
  37. Lcd "Adres: " ; Adres
  38. Wait 2
  39. End If
  40. Next Adres
  41.  
  42. Cls
  43. Locate 1 , 1
  44. Lcd "       Koniec      "
tu masz taki prosty skaner i2c pokaże ci adresy poszczególnych urządzeń
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

Re: DS1307+wysw. OLED

Post autor: marekszy » 23 sty 2018, 9:52

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 "
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: DS1307+wysw. OLED

Post autor: kulamario » 23 sty 2018, 13:37

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ć
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

Re: DS1307+wysw. OLED

Post autor: marekszy » 23 sty 2018, 20:05

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.
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: DS1307+wysw. OLED

Post autor: kulamario » 23 sty 2018, 20:24

tu masz przykład z PCF8583 jak są ustawione adresy
  1.   I2cstart
  2.   I2cwbyte 162
  3.   I2cwbyte 2
  4.   I2cstart
  5.   I2cwbyte 163
  6.   I2crbyte Sekundy , Ack
  7.   I2crbyte Minuty , Ack
  8.   I2crbyte Godziny , Ack
  9.   I2crbyte Dzien , Ack
  10.   I2crbyte Miesiac , Nack
  11.   I2cstop
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: DS1307+wysw. OLED

Post autor: niveasoft » 23 sty 2018, 20:39

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$"
  1. $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3. $hwstack = 64
  4. $swstack = 32
  5. $framesize = 128
  6. $baud = 9600
  7.  
  8. Config Submode = New
  9.  
  10. '*****************************************************************
  11. '*              CONFIG FOR HARDWARE TWI (I2C)                    *
  12. '*****************************************************************
  13.  
  14. $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
  15. Config Scl = Portc.5                                        ' used i2c pins
  16. Config Sda = Portc.4
  17. Config Twi = 400000                                         ' i2c speed
  18. I2cinit
  19.  
  20.  
  21.  
  22. '*****************************************************************
  23. '*                       OLED CONFIG                             *
  24. '*****************************************************************
  25. $lib "glcdSSD1306-I2C.lib"                                  ' override the default lib with this special one
  26.  
  27. Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
  28. Cls
  29.  
  30. '*****************************************************************
  31. '*               TIMER2 CONFIG FOR TIME BASE                     *
  32. '*****************************************************************
  33.  
  34. Config Timer2 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
  35.  Compare2a = 77                                             '10ms @8MHz/1024
  36.  
  37. '*****************************************************************
  38. '*            CONFIG FOR DS3231 I2C CLOCK (RTC)                  *
  39. '*****************************************************************
  40.  Config Clock = User
  41.   Config Date = Dmy , Separator = Minus
  42.   'address of ds3231
  43.     Const Ds3231w = &HD0
  44.     Const Ds3231r = &HD1
  45.  Dim Weekday As Byte , Old_day As Byte , Weekday_str As String * 10
  46.  Dim Time_str As String * 10 , Old_sec As Byte
  47.  Dim I2c_err As Byte , 100ms As Byte
  48.  
  49.  
  50. Do
  51.  
  52. Loop
  53.  
  54.  
  55. Getdatetime:
  56.  
  57. I2cstart                                                    ' Generate start code
  58.  I2cwbyte Ds3231w                                           ' send address
  59.  If Err = 1 Then
  60.   I2c_err = 1 : Return
  61.  Else
  62.   I2c_err = 0
  63.  End If
  64.  I2cwbyte 0                                                 ' start address in 1307
  65.  
  66. I2cstart                                                    ' Generate start code
  67.  I2cwbyte Ds3231r                                           ' send address
  68.  I2crbyte _sec , Ack
  69.  I2crbyte _min , Ack                                        ' MINUTES
  70.  I2crbyte _hour , Ack                                       ' Hours
  71.  I2crbyte Weekday , Ack                                     ' Day of Week
  72.  I2crbyte _day , Ack                                        ' Day of Month
  73.  I2crbyte _month , Ack                                      ' Month of Year
  74.  I2crbyte _year , Nack                                      ' Year
  75. I2cstop
  76.  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  77.  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
  78.  
  79. Return
  80.  
  81. Setdate:
  82.  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  83. I2cstart                                                    ' Generate start code
  84.  I2cwbyte Ds3231w                                           ' send address
  85.  I2cwbyte 4                                                 ' starting address in 1307
  86.  I2cwbyte _day                                              ' Send Data to SECONDS
  87.  I2cwbyte _month                                            ' MINUTES
  88.  I2cwbyte _year                                             ' Hours
  89. I2cstop
  90. Return
  91.  
  92. Settime:
  93.  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  94. I2cstart                                                    ' Generate start code
  95.  I2cwbyte Ds3231w                                           ' send address
  96.  I2cwbyte 0                                                 ' starting address in 1307
  97.  I2cwbyte _sec                                              ' Send Data to SECONDS
  98.  I2cwbyte _min                                              ' MINUTES
  99.  I2cwbyte _hour                                             ' Hours
  100. I2cstop
  101. Return
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ