mikrocontroller.net

Forum: Projekte & Code AVR Bascom Schleife mit Zähler funzt nicht - wieso?


Autor: LJay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.

ich bin echt ratlos. Zwar bin ich erst anfänger in basic, aber nen
Zähler mit ner Schleife habe ich bisher in jeder Programmiersprache
hinbekommen.

Kann mir evtl. jemand erklären, wieso das folgende nichts funzt?!
Bei jedem Durchlauf soll "I" incrementiert werden.
Sobald I grösser als 10 ist, soll er mir dies über ein LED (LED an)
zeigen. Ist I < 10, bleibt das LED aus.

Nach ein paar Tests konnte ich lediglich feststellen, das I den
Wert 1 erreicht. Es scheint also, als würde er die Funktion oder
das Increment nur einmal ausführen.

(AT90S2313, gecodet mit Bascom)
Ddrb = &B11111100
Portb = &B00001111
Ddrd = &B1001011
Portd = &B0000000

Dim I As Long      'Schleifenzaehler
I = 0

On Timer0 Zeitmesser
Config Timer0 = Timer , Prescale = 8

Enable Timer0
Enable Interrupts

Zeitmesser:
' 1 Ueberlauf = 0,1ms
  Timer0 = 210      'Startposition

  If I > 10 Then
   Reset Portb.3
  Else
   Set Portb.3
  End If

  Incr I      'I incrementieren (+1)
Return

Do
Loop

Autor: formtapez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
16 Bit Variabeln lassen sich nicht mit If abfragen. Und in einer
Timer-Routine schon gar nicht.

Ich habe mir daran auch mal die Zähne ausgebissen....
Ich glaube da konnte man aber mit dem Befehl Varptr tricksen....

MfG
formtapez

Autor: LJay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha?!
Da ich absoluter basic und MC Beginner bin, könntest du das etwas
genauer erklären, wie ich das hinbekomme?

Der Zähler sollte bis ca. 10000 gehen können.
Da 10000 dann eigentlich 1Sekunde entsprechen würde, wenn ich richtig
liege.

Autor: formtapez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am einfachsten wäre es wohl den Prescaler größer zu machen um so eine 8
Bit Variable nehmen zu können.

MfG
formtapez

Autor: Peter Löschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

fehlt da nicht was?

On Timer0 Zeitmesser
Config Timer0 = Timer , Prescale = 8
 Load Timer 210 'sonst startet er nie!
Enable Timer0
Enable Interrupts

@formtapez
das mit den 16(oder mehr)bit variablen geht schon, nur muss man
aufpassen, dass wärend der If abfrage kein interrupt kommt, der diese
variable ändert sonst = Unfug

Peter

PS: kann mich auch irren (mein Irrtumszähler ist vom Typ Long:)

Autor: LJay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auch mit "Load Timer 210" geht es nicht!

Er geht ja mind. einmal in die FUnktion rein, als ich schätze schon
das die Timerfunktion auch ohne dieses "load timer" startet.

Autor: Peter Löschnig (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo

habe mal ein Codebeispiel angehängt bei dem ich ähnliches mache
und bei mir funzt es !

Peter

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Do-Loop Schleife muss vor der Interruptroutine stehen.

Bernd

Autor: LJay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sowas triviales aber auch.
Darauf muss ja erstmal einer kommen, und dann auch noch nen Noob.
;)

Danke Bernd, jetzt funktionert das schonmal.
Dann werd ich mal sehen, wie ich nun weiter komme.

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.