www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [Pollin Atmel-Programmer] Testtoll läuft nicht


Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
 $regfile = "m32def.dat"
 $framesize = 32
 $swstack = 32
 $hwstack = 32
 $crystal = 16000000
 $baud = 9600

Dim A As Byte                                               'dimensionieren der verwendeten Variablen
Dim B As Byte

Ddrd = &B11100000                                           'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
Portd = &B00000000                                          'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)


Main:                                                       'Hauptprogramm                                                  'Anfang der Schleife

  If Pind.2 = 1 Then                                        'Wenn an Pin 2 von Port D ein high level anliegt, dann...

  Toggle Portd.5                                            '...setze Pin 5 von Port D von high auf low oder umgekehrt
  Bitwait Pind.2 , Reset                                    'warte bis an Pin 2 von Port D wieder ein low level anliegt

  End If                                                    'Ende der Bedingung
  If Pind.3 = 1 Then                                        'Wenn an Pin 3 von Port D ein high level anliegt, dann...

  Toggle Portd.6                                            '...setze Pin 6 von Port D von high auf low oder umgekehrt
  Bitwait Pind.3 , Reset                                    'warte bis an Pin 3 von Port D wieder ein low level anliegt

  End If                                                    'Ende der Bedingung
  If Pind.4 = 1 Then                                        'Wenn an Pin 2 von Port D ein high level anliegt, dann...

  Gosub Beep                                                '...gehe zum Untermenü "Beep"
  Gosub Textausgabe                                         '...gehe zum Untermenü "Textausgabe"
  Bitwait Pind.4 , Reset                                    'warte bis an Pin 4 von Port D wieder ein low level anliegt

  End If                                                    'Ende der Bendingung

Gosub Main

Beep:                                                       'Untermenü "Beep"

  Portd.7 = 1                                               'setzte den Pin 7 von Port D auf high
  Waitms 500                                                'Warte 500 ms
  Portd.7 = 0                                               'setzt den Pin 7 von Port D auf low

Return                                                      'zurück zum Hauptmenü

Textausgabe:                                                'Untermenü "Textausgabe"

  Print "Hallo! Du hast Knopf 3 gedrückt."                  'Sende den Text in den Anführungszeichen über RS232 zum PC

Return

Vielen Dank schon mal für Hilfe
microcontroller

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß denn wirklich niemand was?

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Weiß denn wirklich niemand was?
Denk' schon, daß die Meisten wissen ;-)
Main:                                                       
...
Gosub Main

ist Krampf, der Code ruft sich rekursiv auf, bis der Stack überläuft. 
Mach statt dem Main: ein Do und statt dem Gosub Main ein Loop rein.

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei loop kommt da folgender Fehler:
Error : 45 Line : 58 DO expected ['] , in File : 
...D810038S\Testtool.bas

Autor: MWS (Gast)
Datum:

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

Autor: R. Freitag (rfr)
Datum:

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

Autor: R. Freitag (rfr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MIFT !!

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>MIFT !!
Man fragt sich, was das bedeutet. So ein Wort gibt es nicht.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> So ein Wort gibt es nicht.

Genauso wenig wie es:

> eine Schleife vom Typ Do...While

in Bascom gibt  :D  :D  :D

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
>> So ein Wort gibt es nicht.
>
> Genauso wenig wie es:
>
>> eine Schleife vom Typ Do...While
>
> in Bascom gibt  :D  :D  :D

Dein Post.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dein Post.

???

Ich glaub' das wird mir zu albern hier...

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
>> Dein Post.
>
> ???
>
> Ich glaub' das wird mir zu albern hier...
Oh, ich entschuldige mich vielmals...
Es liegt eine Verwechslung vor.

Autor: Daniel P. (microcontroller)
Datum:
Angehängte Dateien:

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

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist gerade der Gedanke gekommen, dass es evtl. an einer unsauberen 
Lötstelle liegen könnte. Wäre das möglich?

Autor: [/c] (Gast)
Datum:

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

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze das Testtool. Musste nur kleine Änderungen vornehmen, weil 
ich den mega32 habe.

Autor: Stefan B. (fluxflux-sl) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
' $crystal = 16000000 ist nur wirksam bei entsprechender
' Fuse-Einstellung und angeschlossenem 16 MHz Quarz!
$crystal = 16000000
$baud = 9600

Ddrd = &B11100000  ' 1=Ausgabe
Portd = &B00000000 ' 0=Ausgabe low bzw. Pull-up Widerstand aus

'Hauptprogramm
DO
  If Pind.2 = 1 Then
    Toggle Portd.5
    Bitwait Pind.2 , Reset
  End If

  If Pind.3 = 1 Then
    Toggle Portd.6
    Bitwait Pind.3 , Reset
  End If

  If Pind.4 = 1 Then
    Gosub Beep
    Gosub Textausgabe
    Bitwait Pind.4 , Reset
  End If
LOOP

'Unterprogramm Beep
Beep:
  Portd.7 = 1
  Waitms 500
  Portd.7 = 0
Return

'Unterprogramm Textausgabe
Textausgabe:
  Print "Hallo! Du hast Knopf 3 gedrückt."
Return

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt macht der Apparillo gar nichts mehr. Kummonikation funktioniert 
noch. Fuse bits hab ich so wie in der Anleitung.

Autor: Stefan B. (Gast)
Datum:

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

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim ersten Versuch 2-mal. Beim 2., 3., 4., ... gar nicht.

Autor: Stefan B. (Gast)
Datum:

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

Autor: Stefan B. (Gast)
Datum:

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

Autor: Stefan B. (Gast)
Datum:

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

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
s/Halpperiodezeit/Halbperiodezeit/

Autor: Daniel P. (microcontroller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mi dem alten Programm hat sich jetzt was geändert: Das tickt ähnl. 
Metronom. Das neue probiere ich gerade aus.

Autor: Daniel P. (microcontroller)
Datum:

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

Autor: Stefan B. (Gast)
Datum:

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

Autor: Daniel P. (microcontroller)
Datum:

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

Autor: [/c] (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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_Fuses
http://www.wiki.elektronik-projekt.de/mikrocontrol...
http://www.engbedded.com/fusecalc/

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.