Datum: 16.05.2008 13:34
Moin! Ich habe eine Frage, bin gerade erst am einsteigen mit der kleinen Elektronik. Wenn ich ein ganz simples Programm schreibe für den Mega8 in dem er einen Code ausführt, dann beendet, und danach in eine unendlich Schleife geht, dürfte er den vorherigen Dode doch nciht wieder ausführen oder? Bei mir springt er aber irgendwann wieder zum Anfang... nur wenn ich in die do loop funktion auch einen Print reinsetze, tut er das nicht. wie mache ich das nun richtig, dass er die Endlosschleife nicht verlässt? vielen Dank Andreas Beispiel für Bascom:
Dim A As Byte
For A = 1 To 10
Print "A: " ; A
If A > 9 Then
Goto Weiter
End If
Next A
Weiter:
Do
Loop
End
|
Datum: 16.05.2008 13:38
Vielleicht optimiert der Compiler die leere Schleife einfach weg? Müsste es korrekt nicht heissen DO LOOP UNTIL <Bedingung> Vielleicht lässt sich die Optimierung lokal oder global ausschalten. (-> Handbuch)
Datum: 16.05.2008 13:39
Watchdog ausgeschaltet? Irgendwelche Reset-Quellen (freigegebene Interrupts ohne Handler, keine Ahnung, was BASCOM damit macht)? BTW: Ich hab zwar von BASCOM an sich nicht viel Ahnung, aber wenn Du schon eine for-Schleife benutzt, die nach einer vorgegebenen Anzahl von Durchläufen (in diesem Fall 10) sowieso abgebrochen wird, dann brauchst Du den Abbruch nicht auch noch mit einem if und einem goto in der Schleife herbeizuführen. Eine for-Schleife macht wenig Sinn, wenn sie so "abgewürgt" wird.
Datum: 16.05.2008 13:43
Probier mal so: Dim A as Byte A = 1 While A < 10 Print "A: " ; A Incr A Wend Do Loop End MfG Paul
Datum: 16.05.2008 14:18
Danke für die Antworten! Ähm ja das abwürgen ist hässlich war noch ein relikt aus meinem testversuchen... das mit dem wegoptimieren macht sinn... paul, der code bewirkt ziemlich genau das selbe... und wenn ich den Do loop until A=12 mache, springt er auch raus. Mal sehen immerhin macht es jetzt sinn, danke! Andreas
Datum: 16.05.2008 15:35
Hm, ich habe mal weiter probiert: ich habe einen NTC an nen ADC angeschlossen, der Wert verändert sich auch, aber auch dann wird der Mega immer wieder neu gestartet. undzwar alle 1,64 Sekunden Wie kann das sein? Johannes M. du hast vorhin von Watchdog und Interrupt gesprochen. sowas habe ich in meinem aktuelen Programm nicht drin, kann es sein das das von älteren Programmen im Mega gespeichert bleibt? Das kann ich mir ja garnicht vorstellen. Meine lfuse sind: 0xEE und hfuse 0x99 und habe einen externen 16mhz quarz. Merlin
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 57600
Waitms 500
Print ""
Print "neustart"
Print ""
Waitms 500
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte
Dim Mx As Word 'max
Dim Mn As Word 'min
Channel = 0
Mx = Getadc(channel)
Mn = Getadc(channel)
Do
W = Getadc(channel)
If W < Mn Then
Mn = W
End If
If W > Mx Then
Mx = W
End If
Print "Min: " ; Mn ; " Aktuell: " ; W ; " Max " ; Mx
Loop
End
|
Datum: 16.05.2008 17:43
Hm. Das Programm sieht gut aus. Hast Du am PC einen fehlerfreien Empfang, d.h. kommt der Text vernünftig an? Wenn ja, stimmen die Fuse-Einstellungen auch. 57600 Baud sind aber für 16 Mhz nicht so gut, weil das schon 2,1% Abweichung vom Ideal ergibt. Nimm mal 9600 Baud. (aber das ist nicht die Ursache für einen Neustart). Mach mal einen 10 Kiloohm Ziehwiderstand von Reset nach +Ub. MfG Paul
Datum: 16.05.2008 17:58
Geht es auch mit einem Do ... Loop until 0 nicht ? Wenn das Programm beendet wird, wird das Programm doch nicht automatisch so periodisch wiederholt, oder ? Vielleicht den uC mal komplett löschen und dann neu flashen. Bricht die Spannung bei der Wandlung ein ? Sind genug Kondensatoren in der Schaltung ?
Datum: 16.05.2008 22:48
andreas wrote: > auch, aber auch dann wird der Mega immer wieder neu gestartet. undzwar > alle 1,64 Sekunden ... > Meine lfuse sind: 0xEE und hfuse 0x99 und habe einen externen 16mhz > quarz. Setze das Fuse High Byte auf 0xD9 und alles wird gut. Mit 0x99 (Bit 6 auf '0') hast du den Watchdog Timer permanent enabled, welcher dir dann in regelmäßigen Abständen deinen Controller resetet. Gruß, Magnetus
Datum: 16.05.2008 22:53
Moin, Die Daten kommen am PC super an, ohne Fehlern... der 10kOhm widerstand von Reset an + ist drin, Controller komplett löschen, hm, ich programme mit Avrdude (Wegen dem USBasp) habe den mit parameter -e (perform chip erase) gelöscht, dann kam natürlich nix mehr im Terminal an, danach neu geflasht und das selbe scenario. Bei welcher Wandlung könnte die Spannung einbrechen? Ich habe ein stabilisiertes Netzteil mit dem der Chip versorgt wird. Kondensatoren zwischen VCC und GND am uC einen 100nf und am Quarz 22pF Kondensatoren... Sollte doch ausreichen, oder? Ich werde mal mit dem internen Quarz versuchen... Merlin
Datum: 16.05.2008 23:31
Moin Magnus! Das wars, vielen Dank!! ich ahbe deinen beitrag vorher leider nicht gesehen, habe wohl gerade getippt! Also dankeschön dir und auch den anderen für die unterstützung! Merlin
Datum: 16.05.2008 23:41
Biddeschöööön ;) Ich dachte mir schon, dass du mein Posting nicht gesehen hast, weil du wahrscheinlich vorher begonnen hattest, dein Posting zu tippen. Deswegen mein (ähüm...) "dezenter" Hinweis :o) Viel Spaß noch, Magnetus
Datum: 16.05.2008 23:43
Nachtrag: Es war übrigens eine Weise Entscheidung, uns den Inhalt der Fuse Bytes mitzuteilen.
Datum: 17.05.2008 01:41
Ja, das habe ich auch gedacht :) Ich ahb sie einfach mal mit dazu geschriebn da ich mir mit den fuses garnicht sicher war, ich habe einfach in dem fuse calculator: http://palmavr.sourceforge.net/cgi-bin/fc.cgi auf externen quarz gestellt und dachte ich werde glücklich :) vielleicht noch eine Frage dazu, wofür steht das 1k CK oder 16k CK und die startup time? Wann ist es denn sinnvoll den Controller zu verzögern? aber viel mehr interessiert mich das mit den **K CK naja, bis dann! Andreas
Datum: 17.05.2008 09:32
This setting is for slow rising power which may be necessary depending on your power supply. (The time needed by your power supply to reach a stable voltage). Stable voltage = stable operation of the microcontroller.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel
