Jacob Pirna Startseite [www.pirnaer.de] >> [AVR/Atmel Mikrocontroller] >> BASCOM Beispiele für myAVR
[Grundgerüst LCD] [Echtzeit Uhr DS1307] [Temperaturmessung mit DS1820] [I2C (TWI) EEPROM]


Beispiel für myAVR Board mit LCD Display und Echtzeituhr (RTC) DS1307



Der BASCOM Compiler unterstützt verschiedene Datum und Zeit-Funktionen, über Benutzer eigene Funktionen, wie hier beim DS1307, oder auch softwaremäßig über einen zweiten Quarz bei den ATmega-Prozessoren, mit RTC Unterstützung über einen speziellen Timer.

Der DS1307 wird über die I2C Schnittstelle angesprochen, bei einigen Herstellern auch als TWI bezeichnet. Die I2C (TWI) Funktion wird von den meisten Atmel-Prozessoren bereits hardwaremäßig unterstützt und ist in BASCOM bereits inplementiert.

Man muß lediglich noch die Adressen der Hardware und die entsprechenden Kommados kennen, hier das Beispiel für den DS1307:

'------------------------------------------------------------------------------
' LCD:  Db4-Db7 = Portd.4-Portd.7 E = Portd.3 Rs = Portd.2 Backlight = Portb.1
' I2C:  Sda = Portc.4 Scl = Portc.5
' UART: RxD = Portd.0 TxD = Portd.1
' Frei: Portb.0,Portb.2-Portb.5 Portc.0-Portc.3
'------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 3686411
$baud = 9600

Ddrd = &HFE
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2

Config Sda = Portc.4                          ' I2C Bus konfigurieren
Config Scl = Portc.5
Const Ds1307w = &HD0                          ' Addresse der Ds1307 Uhr
Const Ds1307r = &HD1

Config Clock = User                           ' Interne Time/Date Routinen für Bascom konfigurieren
Config Date = Dmy , Separator = .

' Init
Ddrb.1 = 1
Cls
Cursor Noblink
Cursor Off
Portb.1 = 1                                   ' 0=Licht aus / 1=Licht an (LCD)

' Stellen der Uhr, muss nur einmal ausgeführt werden
'Time$ = "11:55:00"
'Date$ = "08.01.07"

' Main Loop
Do
 Locate 1 , 1 : Lcd Date$
 Locate 2 , 1 : Lcd Time$
 Waitms 500
Loop

' Unterprogramme für die Bascom Date/Time-Funktionen
Dim Weekday As Byte
Getdatetime:
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 0
  I2cstart
  I2cwbyte Ds1307r
  I2crbyte _sec , Ack
  I2crbyte _min , Ack
  I2crbyte _hour , Ack
  I2crbyte Weekday , Ack
  I2crbyte _day , Ack
  I2crbyte _month , Ack
  I2crbyte _year , Nack
  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
  I2cwbyte Ds1307w
  I2cwbyte 4
  I2cwbyte _day
  I2cwbyte _month
  I2cwbyte _year
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 0
  I2cwbyte _sec
  I2cwbyte _min
  I2cwbyte _hour
  I2cstop
Return

End
 

(c) Hans-Jürgen Jacob 2007 Pirna