Hallo zusammen!

ich hoffe einer von euch kann mir weiterhelfen!
Ich habe einen Mega32 durch einen Mega644 ersetzt und jetzt geht die 1-Wire Temperaturabfrage nicht oder nur zeitweise und sie zeigen falsche Werte an.
Mit dem Mega32 funzt alles prächtig, nur mit dem 644er nicht!
Was ich bisher probiert habe:
- Chip getauscht
- mit dem Oszi den Prozessortakt und den 1-Wire Ausgang kontolliert
(Gleichmäßige Zeiten der Abfragezyklen und/oder sonstige ausserplanmäßige Aktivitäten am 1-Wire Pin
- Betriebspannung überprüft
- Fusebits nochmal überprüft (Einstellung: siehe Code im Anhang)
- Programm nur auf die Temperaturmessung reduziert um Programmierfehlerquellen zu minimieren
Da das Programm mit dem M32 läuft ist, die Hardware somit i.o.

Auffällig war auch daß der INT2 von Bascom nicht richtig eingestellt wurde.
Bascom wollte einfach nicht ein gewisses Bit im EICRA-Register setzen.
Ich hab es dann per ASM erledigt.
(im Anhang ist nur ein Ausschnitt aus meinen Programm; der Ausschnitt zeigt aber beim testen die selben Symtome).
Ausserdem ist mir noch folgendes aufgefallen:
Bei Temperaturen über 20°C setzt die Messung ganz aus (Anzeige 0,0°C)
Bei Temperaturen unter 20°C setzt die Messung allmählich wieder ein

Wer weiss Rat?



Code:
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' Liest 1-Wire Temperatursensoren aus und zeigt die Werte auf dem Display an
'
'-----------------------------------------------------------------------

'Prozessor: ATmega644

'###Lockbits [FF]:###
'Lockbit 65: 11; No restriction fpr SPM u. LPM
'Lockbit 43: 11; No restriction fpr SPM u. LPM
'Lockbit 21: 00; Further programming and verification of the Flash and EEprom is disabled in serial and parallel programming Mode.

'###Fusebits [7F]:###
'Fusebit C: 0 Divison by 8 disabled
'Fusebit B: 1 Clock output disabled
'Kla987: 110111:Full Swing Oscillator; Start-up time: 16K CK + 65 ms; Crystal Osc.; slowly rising power

'###Fusebit High [C1]:###
'I: 1 OCDEN Fuse unprogrammed
'H: 1 JTAG disabled
'Q: 0 Serial programming enabled
'P: 0 Wachtdog Timer always enabled
'G: 0 Preserve EEprom when Chip erase
'FE: 00 4096 Word Boot Size
'D: 1 Reset Vector is $0000

'###Fusebit extended [FC]:###
'Fusebit extendet TSR: 100:Brown-out detection level at VCC=4.3 V


$regfile = "m644def.dat"
$framesize = 54
$swstack = 32                                               'Stackanweisungen
$hwstack = 64
$crystal = 14745600                                         'Quarzfrequenz einstellen
$lib "lcd4busy_v3_1.lib"
$baud = 19200

Config Portc = Output                                       'portc für Die "Lcd4busy_v3_1.lib vorbereiten"
Portc = 255
Config Lcd = 20 * 4

Const _lcdport = Portc                                      ' Konstanten für Lcd-Lib
Const _lcdddr = Ddrc
Const _lcdin = Pinc
Const _lcd_e = 1
Const _lcd_rw = 2
Const _lcd_rs = 3

Config 1wire = Portb.4

Initlcd

Cursor Off                                                  'Cursor ausschalten


'*******************************************************************************
'#### Temperaturvariablen einstellen ###

Const Ds1822 = &H22
Const Skiprom = &HCC                                        ' überspringe ROM Kommandos
Const Read_rom = &H33                                       ' Lese ROM
Const Convertt = &H44                                       ' Start Temperaturmessung
Const Match_rom = &H55                                      'Suche einzelnen Sensor
Const Read_ram = &HBE                                       ' Lese Scratchpad RAM
Const Write_ram = &H4E                                      ' Schreibe Scratchpad RAM
Const Copy_ram = &H48                                       ' Kopiere Scratchpad RAM
Const Aufloesung = &H5F                                     ' Auflösung 11 Bit
Const Th = 00                                               ' Alarmschwelle High
Const Tl = 00                                               ' Alarmschwelle Low


Dim Lsb As Byte
Dim Msb As Byte

Dim Temp As Word                                            ' Temperaturwert 1. Sensor
Dim Temp1 As Integer
Dim Mot_temp As Single
Dim Cur_temp As Single
Dim Batt_a_temp As Single
Dim Batt_b_temp As Single
Dim Auss_temp As Single
Dim Inn_temp As Single
Dim Temp_diff_s As Single

'### Alle 1-Wire Devices initialisieren ###

1wreset
1wwrite Skiprom                                             'überspringe Adressierung
1wwrite Write_ram                                           'Scratchpad zum schreiben vorbereiten
1wwrite Th                                                  'Alarmschwelle Max.Temp
1wwrite Tl                                                  'Alarmschwelle Min.Temp
1wwrite Aufloesung                                          'Konfigurationsbyte ins Scratchpad schreiben...
1wwrite Copy_ram                                            '...und im EEProm sichern

'*******************************************************************************


'#### H A U P T S C H L E I F E ####

Do                                                          
   Gosub Lcd_ausgabe                                        
   Gosub Temperaturmessung_start                            
   Gosub Temperaturmessung
Loop



'*******************************************************************************
Temperaturmessung_start:
'dbg
Waitms 1000                                                 'Wartezeit zum verfolgen auf dem Oszi
1wreset                                                     '1-Wire Bus reseten
   1wwrite Skiprom                                          'Adressierung überspringen
   1wwrite Convertt                                         'Temperaturmessung bei allen Sensoren einleiten


Return

'*******************************************************************************
Temperaturmessung:
Waitms 2000                                                 'Wartezeit zum verfolgen auf dem Oszi

   1wreset
   1wwrite Match_rom                                        'Gezielten Sensor anwählen....
   1wwrite &H22                                             'Werte stammen aus Sensor,Dezimal
   1wwrite &HFD
   1wwrite &HBA
   1wwrite &H17
   1wwrite &H00
   1wwrite &H00
   1wwrite &H00
   1wwrite &HE1

   1wwrite Read_ram                                         '....und auslesen (Scratch Pad)

   Lsb = 1wread()
   Msb = 1wread()


   Temp = Msb                                               'MSB holen
   Shift Temp , Left , 8                                    'Platz für LSB machen
   Temp = Temp + Lsb                                        'zu Word Format zusammenfügen
   Temp1 = Temp                                             'Integer Format
   Mot_temp = Temp1 / 16

   Return

'###############################################################################
'Beginn 2.Sensor DS1822

   1wreset                                                  'Reset i-Button
   1wwrite Match_rom
   1wwrite &H22
   1wwrite &H00
   1wwrite &HC3
   1wwrite &H17
   1wwrite &H00
   1wwrite &H00
   1wwrite &H00
   1wwrite &H47
   1wwrite Read_ram                                         'lese Scratch Pad


   Lsb = 1wread()
   Msb = 1wread()


   Temp = Msb                                               'MSB holen
   Shift Temp , Left , 8                                    'Platz für LSB machen
   Temp = Temp + Lsb                                        'zu Word Format zusammenfügen
   Temp1 = Temp                                             'Integer Format
   Cur_temp = Temp1 / 16

'###############################################################################
'Beginn 3.Sensor DS1822

   1wreset                                                  'Reset i-Button
   1wwrite Match_rom
   1wwrite &H22
   1wwrite &H45
   1wwrite &HB4
   1wwrite &H17
   1wwrite &H00
   1wwrite &H00
   1wwrite &H00
   1wwrite &HE5
   1wwrite Read_ram                                         'lese Scratch Pad


   Lsb = 1wread()
   Msb = 1wread()


   Temp = Msb                                               'MSB holen
   Shift Temp , Left , 8                                    'Platz für LSB machen
   Temp = Temp + Lsb                                        'zu Word Format zusammenfügen
   Temp1 = Temp                                             'Integer Format
   Batt_a_temp = Temp1 / 16


'###############################################################################
'Beginn 4.Sensor DS1822

   1wreset                                                  'Reset i-Button
   1wwrite Match_rom
   1wwrite &H22
   1wwrite &H61
   1wwrite &HAD
   1wwrite &H1B
   1wwrite &H00
   1wwrite &H00
   1wwrite &H00
   1wwrite &H12
   1wwrite Read_ram                                         'lese Scratch Pad


   Lsb = 1wread()
   Msb = 1wread()


   Temp = Msb                                               'MSB holen
   Shift Temp , Left , 8                                    'Platz für LSB machen
   Temp = Temp + Lsb                                        'zu Word Format zusammenfügen
   Temp1 = Temp                                             'Integer Format
   Batt_b_temp = Temp1 / 16


'###############################################################################
'Beginn 5.Sensor DS1822

   1wreset                                                  'Reset i-Button
   1wwrite Match_rom
   1wwrite &H22
   1wwrite &H09
   1wwrite &HD8
   1wwrite &H1B
   1wwrite &H00
   1wwrite &H00
   1wwrite &H00
   1wwrite &HCF
   1wwrite Read_ram                                         'lese Scratch Pad


   Lsb = 1wread()
   Msb = 1wread()


   Temp = Msb                                               'MSB holen
   Shift Temp , Left , 8                                    'Platz für LSB machen
   Temp = Temp + Lsb                                        'zu Word Format zusammenfügen
   Temp1 = Temp                                             'Integer Format
   Auss_temp = Temp1 / 16


   '###############################################################################
'Beginn 6.Sensor DS1822

   1wreset                                                  'Reset i-Button
   1wwrite Match_rom
   1wwrite &H22
   1wwrite &H98
   1wwrite &HCD
   1wwrite &H1B
   1wwrite &H00
   1wwrite &H00
   1wwrite &H00
   1wwrite &HE7
   1wwrite Read_ram                                         'lese Scratch Pad

   Lsb = 1wread()
   Msb = 1wread()

   Temp = Msb                                               'MSB holen
   Shift Temp , Left , 8                                    'Platz für LSB machen
   Temp = Temp + Lsb                                        'zu Word Format zusammenfügen
   Temp1 = Temp                                             'Integer Format
   Inn_temp = Temp1 / 16

Return

'*******************************************************************************
Lcd_ausgabe:
Waitms 1000
      Cls
      Lcd "Motortemp."
      Lowerline
      Lcd "Curtistemp."
      Thirdline
      Lcd "Batterie 1"
      Fourthline
      Lcd "Batterie 2"


Locate 1 , 13
   Lcd Fusing(mot_temp , "##.#") ; Chr(32) ; Chr(223) ; Chr(67)

Locate 2 , 13
   Lcd Fusing(cur_temp , "##.#") ; Chr(32) ; Chr(223) ; Chr(67)


Locate 3 , 13
   Lcd Fusing(batt_a_temp , "##.#") ; Chr(32) ; Chr(223) ; Chr(67)


Locate 4 , 13
   Lcd Fusing(batt_b_temp , "##.#") ; Chr(32) ; Chr(223) ; Chr(67)

Return

[/b]