Hallo
Das tönt als haste nen Bock in deinem Programm.
Poste es doch mal.
mfg Luca
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
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!
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?
Mit [_code][_/code].Zitat von Mosi
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
z.B.:Code:Den Text in -Klammern schreiben
Edit: Mist, zu spätCode:'--------------------------------------------------------- ' 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
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"
jetzt war ich zu spät.. dafür dürfte jetzt aber alles angekommen sein...
Was mir auf die Schnelle so aufgefallen ist, ist, dass es kein lcdinit gibt.
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
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
Lesezeichen