Hallo liebe Gemeinde,
ich bin noch ein ziemlicher Anfänger zum Thema Microcontroller. Ich habe
das Pollin-board und einen Atmega32. Als ich das leicht umgeschriebene
Testtool mit PonyProg auf den µc übertragen habe, hieß es, dass alles in
Ordnung ist. Alles ich es allerdings getestet habe, ging nur die
Taster2-LED2 Geschichte. Hier mein Code:
1
$regfile = "m32def.dat"
2
$framesize = 32
3
$swstack = 32
4
$hwstack = 32
5
$crystal = 16000000
6
$baud = 9600
7
8
Dim A As Byte 'dimensionieren der verwendeten Variablen
> Error : 45 Line : 58 DO expected ['] , in File :
Das könnte dann daran liegen, daß Du das "Do" nicht rein geschrieben
hast, so wie ich Dir empfahl.
Lies Dir doch mal für die Grundlagen die Bascom Hilfe durch.
Hallo,
kontrolliere deine Schleifenanweisungen mal auf die Reihenfolge des
Aufrufes.
Den rekursiven Aufruf von main haben andere beretis erwähnt, aber
eigentlich sollte da eine Schleife vom Typ Do...While stehen.
Gruss
Robert
Zurück zum Thema. das funktioniert immer noch nicht. Ich habe im Code
keine Fehler gefunden. Der komplette Quelltext ist nochmal im Anhang.
Edit: Sry, für das sinnlose Zeug bei PRINT.
> Mir ist gerade der Gedanke gekommen, dass es evtl. an einer unsauberen> Lötstelle liegen könnte. Wäre das möglich?
Klar.
Gibt es auf pollin.de nicht ein Test-Binary? Hast du das mal
ausprobiert? Du kannst aber auch ruhig noch 5 - 6 Wochen weiter im
Trüben rumfischen. ;-)
Taster: JP3, JP4 und JP5 sind gesteckt?
LED: JP6, JP7 sind gesteckt?
Backe zunächst ein kleineres Brötchen.
Beobachte das Board: Wie oft blinkt dieses Programm in 16 Sekunden:
$regfile = "m32def.dat"
$crystal = 16000000
Ddrd = &B11100000 ' 1=Ausgabe
Portd = &B00000000 ' 0=Ausgabe low bzw. Pull-up Widerstand aus
'Hauptprogramm
DO
Gosub Beep
LOOP
'Unterprogramm Beep
Beep:
Portd.7 = 1
Waitms 500
Portd.7 = 0
Waitms 500
Return
Das ist ein gutes Ergebnis, weil es zeigt: Dein AVR läuft nicht mit 16
MHz.
Wahrscheinlich läuft er noch mit dem internen RC-Oszillator mit 1 MHz,
d.h. in der Werkseinstellung.
Wenn du das ändern willst, musst du dich mit dem Datenblatt und dem
Artikel AVR Fuses befassen.
Tipp: Bevor du dann die Fuses umprogrammierst, komme wieder her und hole
dir Meinungen deinem Vorhaben ab.
Moment... von welcher LED reden wir hier? Sch***se, wenn der
Fragesteller keinen Schaltplan mitliefert und man selbst zu strack zum
Nachschlagen ist. Auf dem Pollinboard ist Portd.7 doch die Ansteuerung
für den Summer! Das hätte tröten müssen.
Jedenfalls ist eine leuchtende/zuckende LED mit obigem Programm sehr
komisch! Welche LED war's - NetzLED oder LED1 oder LED2? Zucken der
Netz-LED könnte auf Überlastung hindeuten. Wird der 7805 richtig warm
(nicht mehr anfassbar)? Zucken einer der anderen LEDs könnten
Lötprobleme sein.
Nochmal testen! Jetzt mit dem richtigen Anschluss für eine LED (LED2):
$regfile = "m32def.dat"
$crystal = 16000000
Ddrd = &B11100000 ' 1=Ausgabe
Portd = &B00000000 ' 0=Ausgabe low bzw. Pull-up Widerstand aus
'Hauptprogramm
DO
Gosub Beep
LOOP
'Unterprogramm Beep
Beep:
Portd.6 = 1 ' <==== GEÄNDERT!
Waitms 500
Portd.6 = 0 ' <==== GEÄNDERT!
Waitms 500
Return
Datenblatt
http://www.pollin.de/shop/downloads/D810038B.PDF
Wenn es nicht getrötet hat, dann keine Sorgen machen!
In Pollin ATMEL Evaluations-Board steht:
"Summer. Es scheint verschiedene Bestückungen zu geben. Selbstständig
schwingend oder simpel. Achtung! Zumindest eine Sorte "Summer" ist ein
Lautsprecher mit 50 Ohm. Anstatt des Jumpers eine LED aufstecken
vermindert die Belastung des Prozessors erheblich, und man hat zugleich
eine optische Kontrolle."
Wenn dieser sog. AC-Summer ein simpeler Piezosummer ist, muss der viel
viel schneller als mit 500ms Halpperiodezeit abgesteuert werden. Die
Resonanzfrequenz liegt so in der Gegend von 2-3 KHz, d.h. Wartephasen
von 1 bis 2ms sind da nötig, um richtig Sound rauszubekommen. Das sollte
man erst in Angriff nehmen, wenn die Sache mit dem $crystal=... geklärt
ist.
Ok, es tickt exakt im 1/2-Sekunden-Takt.
>wenn die Sache mit dem $crystal=...
Wie bereits geschrieben, bin ich Anfänger. Aber ein mega32 hat doch
16MHz, oder?
Ein Atmega32 kann - laut Atmel Spezifikation im Datenblatt - mit bis
zu 16 MHz getaktet werden, wenn eine externe 16MHz Taktquelle
angeschlossen ist und diese Taktquelle per AVR Fuses eingestellt
ist.
Stefan B. schrieb:
> Ein Atmega32 kann - laut Atmel Spezifikation im Datenblatt - mit bis> zu 16 MHz getaktet werden, wenn eine externe 16MHz Taktquelle> angeschlossen ist und diese Taktquelle per AVR Fuses eingestellt> ist.
Ich hab ger keine externe Taktquelle angeschlossen. Wären also die
vorgegebenen 8MHz richtig?
Daniel P. schrieb:
> Stefan B. schrieb:>> Ein Atmega32 kann - laut Atmel Spezifikation im Datenblatt - mit bis>> zu 16 MHz getaktet werden, wenn eine externe 16MHz Taktquelle>> angeschlossen ist und diese Taktquelle per AVR Fuses eingestellt>> ist.> Ich hab ger keine externe Taktquelle angeschlossen. Wären also die> vorgegebenen 8MHz richtig?
Nein, wenn du die Fuses nicht angefasst hast, hat er 1MHz intern. Die
drei Links unten liest du bitte mal durch, oder du schickst jemanden Das
Board zu und lässt den gleich deine ganze Arbeit machen. ;-)
http://www.mikrocontroller.net/articles/AVR_Fuseshttp://www.wiki.elektronik-projekt.de/mikrocontroller/avr/fusebit_tutorialhttp://www.engbedded.com/fusecalc/