mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage für Mega8


Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal so:

Dim A as Byte

A = 1
While A < 10
  Print "A: " ; A
  Incr A
Wend

Do

Loop

End

MfG Paul

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Magnus Müller (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal: Fuse High Byte !

Beitrag "Re: Anfängerfrage für Mega8"

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

Es war übrigens eine Weise Entscheidung, uns den Inhalt der Fuse Bytes 
mitzuteilen.

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.