martin66119
04.10.2010, 16:58
Hallo an alle!
Im Moment bin ich wieder dabei meinen "myavr" der mit einem ATmega8 ausgestattet ist wieder in Betrieb zu nehmen. Zur Programmierung nehme ich Bascom. Das hat auch soweit funktioniert. Da ich noch einen ATmega168 zu Hause habe, wollte ich diesen verwenden. Den alten raus den neuen ATmega168 rein. Compilieren und übertragenh ans Board hat auch geklappt nur das Programm lief nicht. Was ist da los. Kann mir jemand helfen:
In Bascom hatte ich unter Options/Compiler/Chip den m168def.dat ausgewählt.
Hier der Code der mit dem ATmega8 lief:
$regfile = "m8def.dat" 'für den ATMega168 hier m168def.dat eingesetzt
$crystal = 3686400
$hwstack = 46
$swstack = 40
$framesize = 40
'**************************Funktionen LCD-Display*******************************
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port
Config Portb = Output
Pumpe Alias Portb.3
Dim ___lcdno As Byte
___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls
'**************************Def. allgemeiner Variabeln***************************
Dim Tempmessstelle(8) As Single
'*************************Config Timer1*****************************************
Config Timer1 = Timer , Prescale = 1024 '64 '256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 34286 'Timer1 soll schon von 34285 wegzählen 4 sekunden
'***************************Config 1Wire****************************************
Config 1wire = Portc.1 'DS1820
Match_rom Alias &H55
Read_scratchpad Alias &HBE
Start_conversion Alias &H44
Fg Alias 0
Hg Alias 1
Rl Alias 2
Vl Alias 3
Dim Read_temp As Integer
Dim Sensor_ids(48) As Byte
Dim Id As Byte
Dim Offset As Byte
Dim Ds_array(7) As Byte
Dim Bruchteil As Single
Dim Temperatur As Single
Dim I As Integer
'***************************ID 1Wire configurieren******************************
For Id = 1 To 40 '40 'Einlesen der 5 Sensoren IDs (5*8 Byte)
I = Id - 1
Readeeprom Sensor_ids(id) , I
Next Id
'***********************************Hauptprogramm* ******************************
Do
Loop
End
'**********************************1Wire********** ******************************
1wire:
For Id = Fg To Vl
Offset = Id * 8
Offset = Offset + 1 'Offset geht auf 1, 9, 17, 25 und 33
1wreset 'hier wird der Temperaturwert eingelesen
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8 '8 Byte ID wird übertragen
1wwrite Read_scratchpad
For I = 1 To 7 'nur bis 7, weil 8 und 9 uninteressant
Ds_array(i) = 1wread()
Next I
Read_temp = Makeint(ds_array(1) , Ds_array(2))
1wreset 'jetzt wird wieder die Konvertierung gestartet
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8
1wwrite Start_conversion
Shift Read_temp , Right
If 127 < Read_temp Then Read_temp = Read_temp - 32768
Bruchteil = 16 - Ds_array(7)
Bruchteil = Bruchteil / 16
Bruchteil = Bruchteil - 0.25
Temperatur = Read_temp + Bruchteil
Tempmessstelle(id + 1) = Temperatur
If Temperatur <> 85.0 Then ' < 80.0 And Temperatur > -20.0 Then
Tempmessstelle(id + 1) = Temperatur
End If
'FG Alias 0
'HG Alias 1
'RL Alias 2
'VL Alias 3
___lcdno = 0
Select Case Id
Case Fg:
Locate 1 , 1 : Lcd "FG: "
Locate 1 , 5 : Lcd Fusing(temperatur , "#.#")
Case Hg:
Locate 1 , 11 : Lcd "HG: "
Locate 1 , 14 : Lcd Fusing(temperatur , "#.#")
Case Rl: 'ausgabe im Display ist dann z.B.
Locate 2 , 1 : Lcd "VL: "
Locate 2 , 5 : Lcd Fusing(temperatur , "#.#" )
Case Vl:
Locate 2 , 11 : Lcd "RL: "
Locate 2 , 14 : Lcd Fusing(temperatur , "#.#")
End Select
Cursor Off
Next Id
Return
Return
'**************************Subroutine für Timer1********************************
Isr_von_timer1: 'ISR von Timer1
Timer1 = 34286
Gosub 1wire
Return
$eeprom
Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF '
Data &H10 , &H1B , &HD0 , &H23 , &H01 , &H08 , &H00 , &H23 '
Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11 '
Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67 '
Data &H10 , &H56 , &HA3 , &H23 , &H01 , &H08 , &H00 , &H3F '
Data &H10 , &HBD , &HB6 , &H23 , &H01 , &H08 , &H00 , &H40 '
Grüße
Martin
Im Moment bin ich wieder dabei meinen "myavr" der mit einem ATmega8 ausgestattet ist wieder in Betrieb zu nehmen. Zur Programmierung nehme ich Bascom. Das hat auch soweit funktioniert. Da ich noch einen ATmega168 zu Hause habe, wollte ich diesen verwenden. Den alten raus den neuen ATmega168 rein. Compilieren und übertragenh ans Board hat auch geklappt nur das Programm lief nicht. Was ist da los. Kann mir jemand helfen:
In Bascom hatte ich unter Options/Compiler/Chip den m168def.dat ausgewählt.
Hier der Code der mit dem ATmega8 lief:
$regfile = "m8def.dat" 'für den ATMega168 hier m168def.dat eingesetzt
$crystal = 3686400
$hwstack = 46
$swstack = 40
$framesize = 40
'**************************Funktionen LCD-Display*******************************
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port
Config Portb = Output
Pumpe Alias Portb.3
Dim ___lcdno As Byte
___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls
'**************************Def. allgemeiner Variabeln***************************
Dim Tempmessstelle(8) As Single
'*************************Config Timer1*****************************************
Config Timer1 = Timer , Prescale = 1024 '64 '256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 34286 'Timer1 soll schon von 34285 wegzählen 4 sekunden
'***************************Config 1Wire****************************************
Config 1wire = Portc.1 'DS1820
Match_rom Alias &H55
Read_scratchpad Alias &HBE
Start_conversion Alias &H44
Fg Alias 0
Hg Alias 1
Rl Alias 2
Vl Alias 3
Dim Read_temp As Integer
Dim Sensor_ids(48) As Byte
Dim Id As Byte
Dim Offset As Byte
Dim Ds_array(7) As Byte
Dim Bruchteil As Single
Dim Temperatur As Single
Dim I As Integer
'***************************ID 1Wire configurieren******************************
For Id = 1 To 40 '40 'Einlesen der 5 Sensoren IDs (5*8 Byte)
I = Id - 1
Readeeprom Sensor_ids(id) , I
Next Id
'***********************************Hauptprogramm* ******************************
Do
Loop
End
'**********************************1Wire********** ******************************
1wire:
For Id = Fg To Vl
Offset = Id * 8
Offset = Offset + 1 'Offset geht auf 1, 9, 17, 25 und 33
1wreset 'hier wird der Temperaturwert eingelesen
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8 '8 Byte ID wird übertragen
1wwrite Read_scratchpad
For I = 1 To 7 'nur bis 7, weil 8 und 9 uninteressant
Ds_array(i) = 1wread()
Next I
Read_temp = Makeint(ds_array(1) , Ds_array(2))
1wreset 'jetzt wird wieder die Konvertierung gestartet
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8
1wwrite Start_conversion
Shift Read_temp , Right
If 127 < Read_temp Then Read_temp = Read_temp - 32768
Bruchteil = 16 - Ds_array(7)
Bruchteil = Bruchteil / 16
Bruchteil = Bruchteil - 0.25
Temperatur = Read_temp + Bruchteil
Tempmessstelle(id + 1) = Temperatur
If Temperatur <> 85.0 Then ' < 80.0 And Temperatur > -20.0 Then
Tempmessstelle(id + 1) = Temperatur
End If
'FG Alias 0
'HG Alias 1
'RL Alias 2
'VL Alias 3
___lcdno = 0
Select Case Id
Case Fg:
Locate 1 , 1 : Lcd "FG: "
Locate 1 , 5 : Lcd Fusing(temperatur , "#.#")
Case Hg:
Locate 1 , 11 : Lcd "HG: "
Locate 1 , 14 : Lcd Fusing(temperatur , "#.#")
Case Rl: 'ausgabe im Display ist dann z.B.
Locate 2 , 1 : Lcd "VL: "
Locate 2 , 5 : Lcd Fusing(temperatur , "#.#" )
Case Vl:
Locate 2 , 11 : Lcd "RL: "
Locate 2 , 14 : Lcd Fusing(temperatur , "#.#")
End Select
Cursor Off
Next Id
Return
Return
'**************************Subroutine für Timer1********************************
Isr_von_timer1: 'ISR von Timer1
Timer1 = 34286
Gosub 1wire
Return
$eeprom
Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF '
Data &H10 , &H1B , &HD0 , &H23 , &H01 , &H08 , &H00 , &H23 '
Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11 '
Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67 '
Data &H10 , &H56 , &HA3 , &H23 , &H01 , &H08 , &H00 , &H3F '
Data &H10 , &HBD , &HB6 , &H23 , &H01 , &H08 , &H00 , &H40 '
Grüße
Martin