LCD óra DS1307-el

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Benji01992
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2011. június 6. hétfő, 6:00

LCD óra DS1307-el

Hozzászólás Szerző: Benji01992 »

Sziasztok!
Kezdő vagyok a témában ezért a segítségeteket kérném. Egy órát szeretnék megvalósítani a fent nevezett ic-vel ami 2*16-os lcd-re kiírja az időt illetve 2 gomb amivel beállítom az időt. ameddig jutottam az itt van:

Kód: Egész kijelölése

$regfile = "m8535.dat"
$crystal = 4000000
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Cursor Off
Cls

Config Sda = Portc.4
Config Scl = Portc.3


Dim Year As Byte
Dim Month As Byte
Dim Day As Byte
Dim Weekday As Byte
Dim Hours As Byte
Dim Minutes As Byte
Dim Seconds As Byte

Year = 5
Month = 3
Weekday = 6
Day = 26
Hours = 6
Minutes = 01
Seconds = 0


Do
Gosub Read1307time                                          'read the rtc
Locate 1 , 1
Lcd Hours
lcd ":"
Lcd Minutes
lcd ":"
Lcd Seconds
lcd " "
Lowerline
Lcd Weekday
Lcd ":"
Lcd Day
lcd ":"
Lcd Month
lcd ":"
Lcd Year
lcd " "
Waitms 200
Loop

Read1307time:
'RTC Real Time Clock
I2cstart
i2cwbyte &B11010000                                 'send device code (writing data)
I2cwbyte 0                                                  'address to start sending from
I2cstop
waitms 50
I2cstart
i2cwbyte &B11010001                                 'device code (reading)
I2crbyte Seconds , Ack
I2crbyte Minutes , Ack
I2crbyte Hours , Ack
I2crbyte Weekday , Ack
I2crbyte Day , Ack
I2crbyte Month , Ack
I2crbyte Year , Nack
Seconds = Makedec(seconds)
Minutes = Makedec(minutes)
Hours = Makedec(hours)
Weekday = Makedec(weekday)
Day = Makedec(day)
Month = Makedec(month)
Year = Makedec(year)
I2cstop
Return
Valaki tudna segíteni működőképessé tenni a programot?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

http://avr.tavir.hu/modules.php?name=Fo ... opic&t=827

"Nem informatív, sem címben, sem leírásban a "nem működik".
TE ülsz az áramkör előtt, TE látod mi zajlik, mi van ott. Mi csak a leírásodat látjuk....
Szóval inkább legyen terjengős, mint nem követhető.

Verziószám:
A legutolsó Bascom / Arduino verzió nem mond semmit. Főleg gondolj azokra, akik esetleg 1-4 év múva tévednek erre - és ugyanarra a problémára keresik a megoldást, amit Te itt megoldottál. "


Nos, mi nem jó benne?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ez már lerágott csont!
Beírod a Googleba ezt a 2 bűvös szót: „DS1307 Bascom”
És válogathatsz kedvedre a projectek közül!
:arrow:
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Szép estét!

Bajlódom egy programmal és sehogy sem boldogulok.

Röviden timer0-val lekérdezem a DS1307-et kiíratom lcd-re
Timer1-el lekérdezem a DS1621-ből a hőmérsékletet, majd kiíratom lcd-re

Ezek működnek is rendesen látom az lcd-n az adatokat. Azért csinálom megszakításból, mert majd a főprogramban szeretnék még alkotni és ezek amúgy is működnek, tehát miért is ne lehesen igy használni.

A probléma a következő Timer2 vel szeretném megcsinálni az LCD háttérvilágítás fényerőszabályozását. De ha bekonfigurálom a timer2-t ,és lefordítom a programot, akkor a beégetés és indítás után az óra megbolondul kiírja hogy

Kód: Egész kijelölése

@5.@5.@5     @5:@5:@5
dátumnak és időnek, a hőmérséklet kiírás teljesen jó. Ha kikapcsolom a Timer2-t vagyis nem fordítom bele a programba, akkor minden teljesen jól működik

A program:

Kód: Egész kijelölése


$regfile = "m8def.dat"
$crystal = 4000000
Wait 1

Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portd.7 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcdmode = Port
Initlcd
Cursor Off
Cls

Config Sda = Portd.0
Config Scl = Portd.1
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Config Date = Ymd , Separator = .

Dim X As Byte : Dim Szobatemp As Byte : Dim Szobatemptized As Byte
Dim B As Byte : Dim Weekday As Byte

Config Timer2 = Pwm , Async = Off , Pwm = On , Compare Pwm = Clear Down , Prescale = 1       'Ez a háttérvilágítás
Config Portd.4 = Input
Portd = &B00010000


Const Timer0reload = 65
Const Timer1reload = 3036
config timer0=timer,prescale = 1024
Config Timer1 = Timer , Prescale = 64
Load Timer0 , Timer0reload
Load Timer1 , Timer1reload
On Ovf0 Datetime
On Ovf1 Hőmérséklet
enable ovf0
Enable Ovf1
Start Timer0
Start Timer1
Start Timer2
enable interrupts

'Start Convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
'-------------

'Start Convert
I2cstart
I2cwbyte &H91
I2cwbyte &HEE
I2cstop
'-------------
Time$ = "23:59:45"
Date$ = "11/12/31"
Ocr2 = 127




Do

  If Pind.4 = 0 Then Gosub Enter
Loop



Le:
    X = X - 1
Return

Fel:
    X = X + 1
Return

Enter:
  Waitms 15
  Locate 1 , 11 : Lcd "ENTER"
  Bitwait Pind.4 , Set
  Cls
Return


Hőmérséklet:                                                'Read Temperature
'--------------
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop

I2cstart
I2cwbyte &H91
I2crbyte Szobatemp , Ack
I2crbyte Szobatemptized , Nack
I2cstop
'--------------
If Szobatemptized = 128 Then Szobatemptized = 5 Else Szobatemptized = 0
Locate 1 , 1 : Lcd Szobatemp ; "," ; Szobatemptized
Return

Datetime:
'--------
Locate 4 , 1 : Lcd "20" ; Date$
Locate 4 , 13 : Lcd ; Time$
Return




'called from ds1307clock.lib
Getdatetime:
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' start address in 1307

  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307r                                          ' 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 Ds1307w                                          ' 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 Ds1307w                                          ' send address
  I2cwbyte 0                                                ' starting address in 1307
  I2cwbyte _sec                                             ' Send Data to SECONDS
  I2cwbyte _min                                             ' MINUTES
  I2cwbyte _hour                                            ' Hours
  I2cstop
Return
Az óra program a saple-ból van mert teljesen jól működött máskor is.
A Timer0 és Timer1-et AVRcalc-al csináltam. Az egész program még csak test, hogy miért nem fut normálisan ha timer2-t belefordítom a programba.
A timer2-t többfajta képpen próbáltam konfigurálni de sehogy sem lett jó, megbolondította az órát. A DS-ek felhúzó ellenállása 4.7kohm

Előre is köszönöm!
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Közben kicsit olvasgattam a bascom helpet, amiben az van hogy az óra konfigolásnál a timer2-t használja időzítésnek a proci?
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

gerry írta:Közben kicsit olvasgattam a bascom helpet, amiben az van hogy az óra konfigolásnál a timer2-t használja időzítésnek a proci?
Ez más, azt mondja, hogy ha a timer2-t használjuk, mint órát, hisz van osztója, előosztója, saját oszcillátora külső kivezetésekkel, hogyan lehet konfigurálni.

Kép
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Megtaláltam a hibát. Elfelejtettem a PWM lábra ellenállást tenni. Egy 560ohmos ellenállás megoldotta a problémát :oops:
Válasz küldése