- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Nur ca. 30 Programmierungen möglich bei ATmega8

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.04.2005
    Beiträge
    146

    Nur ca. 30 Programmierungen möglich bei ATmega8

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    merkwürdige Dinge passieren mir:
    nach ca. 30-40 Programmierungen fällt nach und nach die LCD-Anzeige aus, es werden keine Zeichen mehr angezeigt. Anfangs hilft ein Reset, später dann einige Resets hintereinander, noch später muss ich längere Zeit die Betriebsspannung abschalten, irgendwann geht gar nichts mehr.
    Erst vermutete ich einen defekten Controller, nach wechseln war zunächst alles ok, dann ging es nach etwa 30 Zyklen wieder los...
    Zwischendurch ein anderes x-beliebiges Programm mal schnell aufgespielt, und alles geht wieder, für genau ein Mal!
    Ist bei 30 Programmierungen das Ende erreicht?
    Ich verwende:
    Board RN-Mega8-plus, RN-isp-Controller, Bascom

    Gruß, Rene

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.07.2005
    Ort
    127.0.0.1
    Alter
    32
    Beiträge
    824
    Hallo

    Das tönt als haste nen Bock in deinem Programm.

    Poste es doch mal.

    mfg Luca
    Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.04.2005
    Beiträge
    146
    Die Sache ist programmunabhängig,
    ich versuch mal mein derzeitiges Programm-Fragment hier reinzustellen,
    das Programm an sich läuft (soweit es geschrieben ist) sehe ich an den Wirkungen...nur die LCD-Anzeige bleibt aus

    PS.wie macht ihr das nur, dass der Code im eigenem Fenster lesbar ist?
    Angehängte Dateien Angehängte Dateien

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Zitat Zitat von Mosi
    PS.wie macht ihr das nur, dass der Code im eigenem Fenster lesbar ist?
    Mit [_code][_/code].
    Natürlich ohne die "_" Der Code kommt dann dazwischen.

    Bei deinem Problem kann ich dir aber nicht weiterhelfen. Hab noch nie von so einem Fall gehört

    jon
    Nice to be back after two years
    www.roboterfreak.de

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    23.02.2007
    Ort
    Erlangen
    Alter
    29
    Beiträge
    322
    Code:
    Den Text in -Klammern schreiben
    z.B.:
    Code:
    '---------------------------------------------------------
    '             Aquariumsteuerung mit dcf77 Uhr von mosi
    '             mit DCF77 library from Josef Vögel
    '---------------------------------------------------------
    $regfile = "M8def.dat"
    $crystal = 7372000
    
    '------------------------------------------------------------
    'benutzte pins:
    'für LCD: portd, pin 2,3,4,5,6
    '         portc, pin 2,3
    'für DCF Uhr: b,0
    'ausgänge: b.1=Licht, b.2=Heizung, b.3=pwm für licht, b.4=Co2, b.5=mondlicht
    'analogeingänge: c.0=ADC0=Leitwert, c.1=ADC1=pH-Wert
    '1wire eingang=c.6
    
    
    
    
    'Konfigurationen der Hardware
    Config Timer2 = Pwm , Compare Pwm = Clear Up , Prescale = 1
    Config Dcf77 = Pinb.0 , Timer = 1 , Inverted = 1 , Check = 0 , Gosub = Sectic
    Config Date = Dmy , Separator = .
    
    'Konfiguration LCD
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portc.3 , Rs = Portc.2
    Config Lcd = 20 * 4a , Chipset = Ks077
    Config Lcdbus = 4
    Config Pind.6 = Output
    Portd.6 = 0
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    'Konfigurationen pins
    
    Config Pinb.1 = Output                                      'Licht an-aus
    Config Pinb.2 = Output                                      'Heizung an-aus
    Config Pinb.3 = Output                                      'PWM Ausgang Timer2
    Config Pinb.4 = Output                                      'Co2-Ventil an-aus
    Config Pinb.5 = Output                                      'Mondlicht an aus
    
    Taglicht Alias Portb.1
    Heizung Alias Portb.2
    Co2 Alias Portb.4
    Mondlicht Alias Portb.5
    
    Dim Soll_dim As Byte                                        'sollwert der dimmung, abhängig von Tageszeit
    Dim Ist_dim As Byte                                         '255 Werte für PWM-Lichtdimmung
    Dim Licht_lcd As Integer                                    '%Anzeige der Licht-Dimmung
    Dim Zeit As Byte                                            'Zaehlvariable in sekunden für Dimmer
    Dim Pfeil As Byte                                           '3für runter, 4 für waagerecht, 2 für hoch
    Dim Roh_phwert As Integer
    Dim Min_phwert As Single
    Dim Lcd_phwert As Single
    Dim Roh_leitwert As Integer
    Dim Lcd_leitwert As Integer
    
    Const On = 1
    Const Off = 0
    
    
    
    Enable Interrupts
    
    'Sonderzeichen generieren
    
    Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32           ' Gradzeichen
    Deflcdchar 1 , 32 , 32 , 17 , 17 , 17 , 30 , 16 , 32        ' mikrozeichen
    Deflcdchar 2 , 15 , 3 , 5 , 9 , 16 , 32 , 32 , 32           ' pfeil nach oben
    Deflcdchar 3 , 32 , 32 , 16 , 9 , 5 , 3 , 15 , 32           ' pfeil nach unten
    Deflcdchar 4 , 8 , 4 , 2 , 31 , 2 , 4 , 8 , 32              ' pfeil waagerecht
    
    Cls
    Cursor Off
    
    
    'initialisierungen
    _hour = 20                                                  'bei reset auf 20Uhr stellen
    Ist_dim = 100                                               'Dimmer auf etwa 50%
    Zeit = 0                                                    'Sekundenzaehler auf null
    Pfeil = 4                                                   'waagerechter pfeil
    Taglicht = On                                               'bei reset wird licht angeschaltet
    Mondlicht = Off
    Co2 = Off
    Heizung = Off
    Min_phwert = 6.5
    
    Start Adc
    
    
    
    
    Do
    
    
       Locate 1 , 1
       Lcd Time$ ; "    " ; Date$
    
       Select Case _hour
    
        Case 8 To 12 : Soll_dim = 255                           '100%zwischen 8 und 12Uhr
        Case 13 To 15 : Soll_dim = 102                          '40% zwischen 13 und 16uhr
        Case 16 To 22 : Soll_dim = 255                          '100% zwischen 17 und 22Uhr
        Case Else : Soll_dim = 0                                'sonst licht aus
    
      End Select
    
      Gosub Phwert
      Gosub Temperatur
      Gosub Leitwert
    
    
       Locate 2 , 1
       Lcd "temp= " ; Chr(0) ; "C " ; "Lw=" ; Roh_leitwert ; Chr(1) ; "S   "
    
    
       Locate 3 , 1
       Lcd "L=" ; Licht_lcd ; "%" ; Chr(pfeil) ;
    
    
       Locate 4 , 1
       Lcd "phWert=" ; Fusing(lcd_phwert , "#.##") ; "  co2"
    
    
    Loop
    '-------------------------------------------------------------------------------
    '***************Label Temperaturerfassung ************************************
    '-------------------------------------------------------------------------------
    Temperatur:
    
    Return
    
    
    '-------------------------------------------------------------------------------
    '***************Label ph-Werterfassung******************************************
    '-------------------------------------------------------------------------------
    
    
    Phwert:
    
    Roh_phwert = Getadc(1)
    Lcd_phwert = Roh_phwert / 170.66                            '1024steps durch 6Schritte
    Lcd_phwert = Lcd_phwert + 4                                 '0- bei pH=4
    
    If Lcd_phwert <= Min_phwert Then
       Co2 = Off
       Else
       Co2 = On
    End If
    Return
    
    
    
    
    
    
    '-------------------------------------------------------------------------------
    '***************Label Leitwertserfassung ***************************************
    '-------------------------------------------------------------------------------
    
    
    
    Leitwert:
    
    Roh_leitwert = Getadc(0)
    
    
    Return
    
    
    
    
    
    '-------------------------------------------------------------------------------
    '*************sekunden**********************************************************
    '-------------------------------------------------------------------------------
    
    
    
    Sectic:
       Zeit = Zeit + 1                                          'Sekundenzaehler
       If Zeit < 10 Then Return                                 'wenn noch nicht 10sekundene vergangen, dann zurück
    
       Zeit = 0
    
       If Ist_dim = Soll_dim Then                               'wenn sollwert gleich istwert bleibt alles wie es ist,
          Pfeil = 4                                             ' pfeil waagerecht
          Return
       End If
    
       If Ist_dim < Soll_dim Then
          Ist_dim = Ist_dim + 1
          Pfeil = 2                                             'dimmung erhöhen um 1
          Else                                                  'Pfeil nach oben
          Ist_dim = Ist_dim - 1                                 'dimmung verringern um 1
          Pfeil = 3                                             'Pfeil nach unten
       End If
    
       If Ist_dim <> 0 Then                                     'Wenn Dimmung ungleich null, dann EVG anschalten
          Taglicht = On
          Else
          Taglicht = Off
       End If
    
       Compare2 = Ist_dim
       Licht_lcd = Ist_dim * 100                                'Prozent der Dimmung für Anzeige
       Licht_lcd = Licht_lcd / 255
    Return
    
    
    
    
    
    
    
    End
    Edit: Mist, zu spät

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.04.2005
    Beiträge
    146
    Danke schon mal,
    also nochmal:
    Code:
    '---------------------------------------------------------
    '             Aquariumsteuerung mit dcf77 Uhr von mosi
    '             mit DCF77 library from Josef Vögel
    '---------------------------------------------------------
    $regfile = "M8def.dat"
    $crystal = 7372000
    
    '------------------------------------------------------------
    'benutzte pins:
    'für LCD: portd, pin 2,3,4,5,6
    '         portc, pin 2,3
    'für DCF Uhr: b,0
    'ausgänge: b.1=Licht, b.2=Heizung, b.3=pwm für licht, b.4=Co2, b.5=mondlicht
    'analogeingänge: c.0=ADC0=Leitwert, c.1=ADC1=pH-Wert
    '1wire eingang=c.6
    
    
    
    
    'Konfigurationen der Hardware
    Config Timer2 = Pwm , Compare Pwm = Clear Up , Prescale = 1
    Config Dcf77 = Pinb.0 , Timer = 1 , Inverted = 1 , Check = 0 , Gosub = Sectic
    Config Date = Dmy , Separator = .
    
    'Konfiguration LCD
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portc.3 , Rs = Portc.2
    Config Lcd = 20 * 4a , Chipset = Ks077
    Config Lcdbus = 4
    Config Pind.6 = Output
    Portd.6 = 0
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    'Konfigurationen pins
    
    Config Pinb.1 = Output                                      'Licht an-aus
    Config Pinb.2 = Output                                      'Heizung an-aus
    Config Pinb.3 = Output                                      'PWM Ausgang Timer2
    Config Pinb.4 = Output                                      'Co2-Ventil an-aus
    Config Pinb.5 = Output                                      'Mondlicht an aus
    
    Taglicht Alias Portb.1
    Heizung Alias Portb.2
    Co2 Alias Portb.4
    Mondlicht Alias Portb.5
    
    Dim Soll_dim As Byte                                        'sollwert der dimmung, abhängig von Tageszeit
    Dim Ist_dim As Byte                                         '255 Werte für PWM-Lichtdimmung
    Dim Licht_lcd As Integer                                    '%Anzeige der Licht-Dimmung
    Dim Zeit As Byte                                            'Zaehlvariable in sekunden für Dimmer
    Dim Pfeil As Byte                                           '3für runter, 4 für waagerecht, 2 für hoch
    Dim Roh_phwert As Integer
    Dim Min_phwert As Single
    Dim Lcd_phwert As Single
    Dim Roh_leitwert As Integer
    Dim Lcd_leitwert As Integer
    
    Const On = 1
    Const Off = 0
    
    
    
    Enable Interrupts
    
    'Sonderzeichen generieren
    
    Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32           ' Gradzeichen
    Deflcdchar 1 , 32 , 32 , 17 , 17 , 17 , 30 , 16 , 32        ' mikrozeichen
    Deflcdchar 2 , 15 , 3 , 5 , 9 , 16 , 32 , 32 , 32           ' pfeil nach oben
    Deflcdchar 3 , 32 , 32 , 16 , 9 , 5 , 3 , 15 , 32           ' pfeil nach unten
    Deflcdchar 4 , 8 , 4 , 2 , 31 , 2 , 4 , 8 , 32              ' pfeil waagerecht
    
    Cls
    Cursor Off
    
    
    'initialisierungen
    _hour = 20                                                  'bei reset auf 20Uhr stellen
    Ist_dim = 100                                               'Dimmer auf etwa 50%
    Zeit = 0                                                    'Sekundenzaehler auf null
    Pfeil = 4                                                   'waagerechter pfeil
    Taglicht = On                                               'bei reset wird licht angeschaltet
    Mondlicht = Off
    Co2 = Off
    Heizung = Off
    Min_phwert = 6.5
    
    Start Adc
    
    
    
    
    Do
    
    
       Locate 1 , 1
       Lcd Time$ ; "    " ; Date$
    
       Select Case _hour
    
        Case 8 To 12 : Soll_dim = 255                           '100%zwischen 8 und 12Uhr
        Case 13 To 15 : Soll_dim = 102                          '40% zwischen 13 und 16uhr
        Case 16 To 22 : Soll_dim = 255                          '100% zwischen 17 und 22Uhr
        Case Else : Soll_dim = 0                                'sonst licht aus
    
      End Select
    
      Gosub Phwert
      Gosub Temperatur
      Gosub Leitwert
    
    
       Locate 2 , 1
       Lcd "temp= " ; Chr(0) ; "C " ; "Lw=" ; Roh_leitwert ; Chr(1) ; "S   "
    
    
       Locate 3 , 1
       Lcd "L=" ; Licht_lcd ; "%" ; Chr(pfeil) ;
    
    
       Locate 4 , 1
       Lcd "phWert=" ; Fusing(lcd_phwert , "#.##") ; "  co2"
    
    
    Loop
    '-------------------------------------------------------------------------------
    '***************Label Temperaturerfassung ************************************
    '-------------------------------------------------------------------------------
    Temperatur:
    
    Return
    
    
    '-------------------------------------------------------------------------------
    '***************Label ph-Werterfassung******************************************
    '-------------------------------------------------------------------------------
    
    
    Phwert:
    
    Roh_phwert = Getadc(1)
    Lcd_phwert = Roh_phwert / 170.66                            '1024steps durch 6Schritte
    Lcd_phwert = Lcd_phwert + 4                                 '0- bei pH=4
    
    If Lcd_phwert <= Min_phwert Then
       Co2 = Off
       Else
       Co2 = On
    End If
    Return
    
    
    
    
    
    
    '-------------------------------------------------------------------------------
    '***************Label Leitwertserfassung ***************************************
    '-------------------------------------------------------------------------------
    
    
    
    Leitwert:
    
    Roh_leitwert = Getadc(0)
    
    
    Return
    
    
    
    
    
    '-------------------------------------------------------------------------------
    '*************sekunden**********************************************************
    '-------------------------------------------------------------------------------
    
    
    
    Sectic:
       Zeit = Zeit + 1                                          'Sekundenzaehler
       If Zeit < 10 Then Return                                 'wenn noch nicht 10sekundene vergangen, dann zurück
    
       Zeit = 0
    
       If Ist_dim = Soll_dim Then                               'wenn sollwert gleich istwert bleibt alles wie es ist,
          Pfeil = 4                                             ' pfeil waagerecht
          Return
       End If
    
       If Ist_dim < Soll_dim Then
          Ist_dim = Ist_dim + 1
          Pfeil = 2                                             'dimmung erhöhen um 1
          Else                                                  'Pfeil nach oben
          Ist_dim = Ist_dim - 1                                 'dimmung verringern um 1
          Pfeil = 3                                             'Pfeil nach unten
       End If
    
       If Ist_dim <> 0 Then                                     'Wenn Dimmung ungleich null, dann EVG anschalten
          Taglicht = On
          Else
          Taglicht = Off
       End If
    
       Compare2 = Ist_dim
       Licht_lcd = Ist_dim * 100                                'Prozent der Dimmung für Anzeige
       Licht_lcd = Licht_lcd / 255
    Return
    
    
    
    
    
    
    
    End

    wenn ich folgendes einmal dazwischen progge, geht alles wieder,
    diese Zeilen sind absolut identisch mit denen des o.g. Programms:
    Code:
       $regfile = "m8def.dat"
     $crystal = 7372000
    
    
     Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portc.3 , Rs = Portc.2
    Config Lcd = 20 * 4a , Chipset = Ks077
     Config Lcdbus = 4
     Config Pind.6 = Output                                     'RW=0
    Portd.6 = 0
    
    
    
     Cls
     Locate 1 , 1
     Lcd "Test LCD"

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.04.2005
    Beiträge
    146
    jetzt war ich zu spät.. dafür dürfte jetzt aber alles angekommen sein...

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Was mir auf die Schnelle so aufgefallen ist, ist, dass es kein lcdinit gibt.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    Hi Mosi,
    nach 30 Zyklen ist selbstverständlich nicht schluss... das sind schon ein paar Zehnerpotenzen mehr. Vielleicht ist irgendwas mit deiner Schaltung nicht in Ordnung... irgendwie muss der AVR ja geschädigt werden. Wenn du ISP nutzt, dann ist vielleicht das Interface nicht ganz ok. Schicke mal den Schaltplan, damit man etwas mehr Infos hat.

    Gruß,
    SIGINT

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    53
    Beiträge
    104
    Hi,

    ich hab bei mir auch öfters mal das Problem, das das Programm nicht fehlerfrei übertragen wird, in etwa so häufig wie das bei Dir klingt. Tritt ausschließlich bei mega8's auf, bei mega32 hab ich solche Zicken noch nicht festgestellt. Abhilfe schafft dann ein vorab ausgeführtes Chip Erase.
    Ich hab auch ab und zu mal den Effekt, das das alte Progamm weiter läuft, speziell, wenn sich nur ein Byte geändert hat und sonst nix.

    Ich nutze twinAVR und einen gekauften Parallelport-Programmer mit einem 74LSirgendwas drinne.

    greetz Rajko

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests