anfänger99
19.02.2011, 14:45
Hallo,
ich habe meinen Mikrocontroller so programmiert, dass ich die Temperatur angezeigt bekomme. Zusätzlich habe ich eingebaut, dass auf dem LCD jeweils die größte gemessene und die kleinste gemessene Temperatur angezeigt wird.Bei der größten gemessenen hat dies funktioniert, aber bei der kleinsten wird immer 0°C angezeigt, obwohl nie 0° gemessen wurden.
Kann mir vielleicht einer sagen, wo der Fehler liegt?
Habe das folgende Programm mit Bascom erstellt:
' Vorlage-Datei für Attiny-Platine
'************************************************* *********
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
$baud = 9600 ' Baudrate RS232
'******************* Deklarationen ************************
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.6
Config Lcdbus = 4
Initlcd
Cls
Config Scl = Portb.5
Config Sda = Portb.7
Dim Aktuell As Byte
Dim Mindest As Byte
Dim Maximal As Byte
Dim X As Byte
Dim Y As Byte
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
'******************** Hauptprogramm ***********************
Do
Deflcdchar Print , 32 , 3 , 3 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)
I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
Locate 1 , 1
Lcd Aktuell
Lcd Chr(0)
Lcd "C"
Locate 1 , 0
I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
Locate 2 , 1
If Mindest > Aktuell Then
Mindest = Aktuell
End If
Lcd Mindest
Lcd Chr(0)
Lcd "C"
I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
If Maximal < Aktuell Then
Maximal = Aktuell
End If
Locate 2 , 7
Lcd Maximal
Lcd Chr(0)
Lcd "C"
Cursor Off
Wait 1
Loop
End
ich habe meinen Mikrocontroller so programmiert, dass ich die Temperatur angezeigt bekomme. Zusätzlich habe ich eingebaut, dass auf dem LCD jeweils die größte gemessene und die kleinste gemessene Temperatur angezeigt wird.Bei der größten gemessenen hat dies funktioniert, aber bei der kleinsten wird immer 0°C angezeigt, obwohl nie 0° gemessen wurden.
Kann mir vielleicht einer sagen, wo der Fehler liegt?
Habe das folgende Programm mit Bascom erstellt:
' Vorlage-Datei für Attiny-Platine
'************************************************* *********
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
$baud = 9600 ' Baudrate RS232
'******************* Deklarationen ************************
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.6
Config Lcdbus = 4
Initlcd
Cls
Config Scl = Portb.5
Config Sda = Portb.7
Dim Aktuell As Byte
Dim Mindest As Byte
Dim Maximal As Byte
Dim X As Byte
Dim Y As Byte
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
'******************** Hauptprogramm ***********************
Do
Deflcdchar Print , 32 , 3 , 3 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)
I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
Locate 1 , 1
Lcd Aktuell
Lcd Chr(0)
Lcd "C"
Locate 1 , 0
I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
Locate 2 , 1
If Mindest > Aktuell Then
Mindest = Aktuell
End If
Lcd Mindest
Lcd Chr(0)
Lcd "C"
I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
If Maximal < Aktuell Then
Maximal = Aktuell
End If
Locate 2 , 7
Lcd Maximal
Lcd Chr(0)
Lcd "C"
Cursor Off
Wait 1
Loop
End