mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pollin Board macht nicht was es soll mit ATMega16


Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe ein Problem und bin kurz vor dem Verzweifeln.

Ich habe ein Pollin Atmel Evaluationsboard V2.0.1. Dieses Board ist nun 
gelötet, mit einem ATMega16 bestückt und vie einem Prolific 
USB==>Seriell Wandler mit dem PC verbunden.
Programmiert wird mit PonyProg, was auch mehr oder weniger funktioniert.

Das Problem ist nun folgendes: Der µC wird vie PonyProg und dem 
USB==>Seriell Wandler mit dem "Testtool.hex" geflasht. Nach dem 
Schreiben breche ich bei der Verifizierung ab, da das laut Internet 
nicht nötig ist und ca. 2h dauert.

Wenn das Programm auf dem µC ist, wird die Stromversorgung unterbrochen 
und wieder angeschlossen, damit der µC "von vorne anfängt".

Wenn ich nun den Taster1 drücke geht auch die LED 1 an, und beim 
Wiederholten drücken wieder aus. Bei Taster2 geht natürlich die LED 2 
ein und aus.

Beim Taster3 hört man nur ein kurzes Knacken aus dem Lautsprecher.

Nach ca 4 Minuten aber, benimmt sich der µC bei einem Tastendruck so, 
wie wenn diverse Taster gedrückt würden. Die Leds gehen beide aus, 
obwohl nur ein Taster gedrückt wurde, Der Lautsprecher knackt bei Taster 
1, und ähnliches. An was könnte das liegen? Dies ist bei 2verschiedenen 
ATMegas so. Ich hab bis jetzt beide ausprobiert.

Danke schonmal für die hoffentlich vielen Antworten!

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja: manchmal passiert das komische verhalten auch gleich am Anfang...

Sorry für den Doppelpost!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Nach dem Schreiben breche ich bei der Verifizierung ab, da das laut
>Internet nicht nötig ist und ca. 2h dauert.

Dann hast du das falsche Equipment.

>An was könnte das liegen?

Programmfehler.

>Dies ist bei 2verschiedenen ATMegas so.

Warum sollten beide nicht das gleiche tun? Auch wenn es falsch ist 
(siehe oben).

Aber mal im Ernst: Woher soll hier jemand wissen, was du da und womit du 
es programmiert hast?

MfG Spess

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Auch ich arbeite mit dem Teil von Pollin. In der Regel sind die Fehler 
bisher immer vor dem PC gewesen. Also, kontrollier mal, ob du z.B. den 
Stack initialisiert hast. Ob du Unterprogramme, die mit Ret enden 
sollten eventuell mit RJMP aufrufst, oder RETI bei Interrupts nicht 
benutzt. Beliebt sind auch falsche Anwendung von LD- Befehlen. POP's 
sind keine Aufforderung zu Schandtaten, sondern zwingend notwendig nach 
PUSH und daas in der richtigen Reihenfolge. ( First in, last out)  Das 
sind so Fehler, die mir auf Anhieb einfallen. Aber benutz doch mein 
OpenEye, um zu verstehen, was dein Controller so anstellt. Dazu 
braucht's nur eine kleine UART-Routine, um den Variablenbereich in 
Richtung PC zu senden. Wie's gemacht wird, sollte alles beschrieben 
sein. Bisher hab ich keine Rückfragen erhalten, so das ich davon ausgeh, 
das es sich problemlos in Projekte integrieren ließ. Such einfach mal 
danach.
Gruß oldmax

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Martin Vogel (oldmax): er flasht ein fertigs .hex zum Test, so wie ich 
ihne verstehe.
Gehen wir davon aus, das ist auch ok.

Auf die Programmierweise wurde schon hingewiesen, gerade bei ersten 
versuchen mit prinzipiell noch unbekannter Hard- und Software würde ich 
nie auf ein Verify verzichten...
Alten PC mit echter Schnittstelle beschaffen oder echten USB-Programmer 
kaufen/bauen.

Was steht zum Testprogramm zu den Fusebits? Sind da Leitungen von PortC 
benutzt?

bei Mega16 fällt mir dann immer JTAG ein...

Gruß aus Berlin
Michael

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
@Michael
Nun ja, das Programm hört sich wie ein mitgeliefertes Testprogramm an. 
Und das muß nicht unbedingt ok sein. Außerdem ist da die Frage, ist auch 
der richtige µC eingebunden?
Die Fehlerbeschreibung klingt wie ein überlaufener Stack. (PUSH-POP oder 
RCall und RET)
Natürlich kann man nicht allzuviel sagen, da das Programm unbekannt ist. 
Auch wenn's vielleicht überheblich klingt, aber ich geh nicht davon aus, 
das "KamikazeProgrammierer" voll den Durchblick hat. Normalerweise hat 
das Pollinboard einen Reset- Taster und ein Abklemmen von der 
Versorgungsspannung ist nicht nötig. Wär ja auch Blödsinn, weil da so 
viele Impulse kommen, die Spannung auf der Platine auch nicht gleich von 
0 auf hundert geht und der Prozessor damit nicht unbedingt sauber die 
Startsequenz durchläuft. Nach außen mag es gut aussehen.....
Gruß oldmax

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Oldmax hat es gut bescchrieben. Ich blick' da noch nicht so richtig 
durch, aber ich bin mir sicher, das wird schon noch ;-)

Einen PC mit serieller Schnittstelle hab ich hier, aber leider mit 
Linux. Da ist alles ein bisschen Komplizierter bzw. ungewohnter.
Ich werde das heute noch ausprobieren.

Ich dachte, das abklemmen der Versorgungsspannung wäre die beste 
Möglichkeit des Resettens. Aber auch beim Drücken des Reset Tasters 
ändert sich nichts an der Reaktion des Controllers.

@spess53: Ich hab das darum mit 2 ATMega16 ausprobiert, da es doch sein 
könnte, dass einer vllt. ein bisschen "Dumm" ist?

Das Testtool.hex ist laut Anleitung für einen ATMega16 ausgelegt, sollte 
ja eigentlich alles gut sein, oder?

>Was steht zum Testprogramm zu den Fusebits? Sind da Leitungen von PortC
>benutzt?
Die Fuses sind so gesetzt wie angegeben. Was PortC ist weiss ich noch 
nicht.

Einen USB ISP Programmer zu bauen, wird das nächste sein, aber um sowas 
zu bauen braucht man erstmal Hardware um einen ATMega8 Flashen zu 
können, oder?

Grüße, Jaki

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Also, wenn dein Reset-Taster keine Wirkung zeigt... dann ist entweder 
der µC verfused oder das Board nicht sauber / richtg gelötet. Am besten, 
du nimmst eine Lupe und kontrollierst mal die Lötungen. Ich hab beim 
ersten mal auch vergessen, ein Pin vom Quarz zu verlöten. Erfolg, das 
ich nach ein paar Tagen die Atmegas wieder aus dem Papierkorb geholt 
hab, nachdem ich das bemerkt hab. Schau auch nach, das keine 
Kurzschlüsse auf dem Board sind.
Gruß oldmax

Autor: m. keller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tipp: Wenn du einen PC hast mit PCI Schnittstelle kauf dir eine RS232 + 
LPT Schnittstellenkarte, kostet 10€ und macht das Entwicklerleben viel 
leichter.
Ein ordentlicher Programmer ist natürlich trotzdem eine Überlegung wert.

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Eine PCI Karte werde ich nicht kaufen, da es der Linux Rechn er für's 
erste tun sollte und danach wollte ich mich an den Nachbau eines USB ISP 
wagen.

Grüße, Jaki

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich bin's nochmal!

Das Board ist eigentlich recht sauber verlötet.
Ob der Reset Taster geht oder nicht, kann ich nicht sagen. Was soll denn 
der µC machen, wenn der Reset gedrückt wird?

Verfust kann der Controller eigentlich nicht sein, da alles so 
eingestellt wie in der Anleitung gezeigt.

Grüße, Jaki

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KamikazeProgrammierer schrieb:
> Hi!

Du musst jetzt endlich anfangen Fakten zu schaffen

* das Board ist sauber verlötet
* das Programm ist fehlerfrei
* die Stromversorgung ist sauber
* Die Fusebits stehen richtig

-> einzig mögliche Schlussfolgerung:
    Alles müsste korrekt funktionieren

Da dem aber nicht so ist, muss irgendeine der Voraussetzungen nicht 
erfüllt sein.

Nur: Das kann von hier aus keiner beurteilen.
Damit du uns in die Lage versetzt, das zu beurteilen gibt es nur eine 
Möglichkeit:
Aufhören uns zu erzählen, was deiner Meinung nach alles ok ist, sondern 
einfach die nackten Tatsachen präsentieren

* Board abfotografieren oder einscannen und zeigen.
  Dann kann sich jemand ansehen, ob eine Lötstelle ev. thermischen
  Fehler haben kann

* Das Programm zeigen
  Dann kann jemand das Programm auf mögliche Schwachstellen abklopfen

* Die Fusebits anzeigen lassen und einen Screenshot posten


Auch wenn der Verify beim Brennen 2 Stunden dauert, solltest du ihn 
zumindest 1 mal durchlaufen lassen um zu sehen, ob das Programm richtig 
gebrannt wurde. Mitlerweile hast du schon wesentlich mehr Zeit als diese 
2 Stunden investiert ohne mit 100% Sicherheit zu wissen, ob das Brennen 
des Programms geklappt hat. Deinem Rechner ist in der Nacht eh fad. Da 
kann er ruhig auch 2 Stunden lang den µC verifizieren.

Autor: KamikazeProgrammierer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Nach einem Programmieren mit Verify am USB=> Seriell Adapter kam die 
Meldung "Write Failed".

Jetzt hab ich PonyProg auch auf dem Linux Rechner und auch mal da 
progrmmiert. Dort ist das Programm in ca. 1-2 Sekunden inkl. Verify 
drauf. Write OK!

Danach Resettet und ausprobiert. Wenn man die Tasten gaaanz langsam 
drückt, also so immer 2sec pause nach jedem drücker, geht es ganz gut, 
aber es macht auch nicht immer was es soll. Wenn man schneller drückt, 
macht das Board echt was es will. Ausserdem hört man kein piepsen aus 
dem Lautsprecher sondern nur ein knacken.

Das Baord ist ordnungsgemäs gelötet, das hat mir ein befreundeter 
"lötprofi" versichert.

Programm:
'--------------------------------------------------------------------------'
'                        Testtool.bas                                      '
'                   2006 ,Pollin Electronic                                '
'                          Freeware                                        '
'--------------------------------------------------------------------------'
'                                                                          '
'Pollin Electronic Atmel-Evaluation-Board                                  '
'Bestellnummer: 810022                                                     '
'Testprogramm für ATmega16                                                 '
'Der gesendete Text kann mit dem Hyperterminal von Windows angezeigt werden'                                                               '
'Einstellungen am Hyperterminal:                                           '
'              Bits pro sekunde:   9600                                    '
'              Datenbits       :      8                                    '
'              Parität         :  keine                                    '
'              Stoppbits       :      1                                    '
'              Flusssteuerung  :  keine                                    '
'                                                                          '
'--------------------------------------------------------------------------'

$regfile = "m16def.dat"                                     'definieren des verwendeten Chips

$crystal = 8000000                                          'definieren des verwendeten externen Quarz (8MHz)

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
Do                                                          '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

Loop                                                        'zum Anfang der Schleife

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 "Atmel-Evaluation-Board"                             'Sende den Text in den Anführungszeichen über RS232 zum PC

Return                                                      'zurück zum Hauptmenü

Ich bin echt Ratlos, was als nächstes kommt...

Autor: Stefan M. (celmascant)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weisst aber schon, das der Programmer auf dem Pollin-Board ein 
"Bitbanger" ist der die Statusleitungen der RS232 missbraucht, um das 
Protokoll zu simulieren?
Ich hab bis jetzt noch keinen USB-RS232-Wandelr gesehen, der mehr als 
RxD und TxD rausgibt!
Damit kann es also nicht richtig klappen!

Mit meinem Pollin-Board (auch V2.0.1) dauert das Vergleichen bei einem 
ATMega32 übrigens ca. 45 Sekunden.

Schau doch mal was die RS232 vom Board rausgibt! Es muss laut Programm 
in einem Terminal-Programm "Atmel-Evaluation-Board" empfangen werden.
Die Einstellungen der seriellen Schnittstelle sind ja auch im Programm 
beschrieben.

Bei den Fuses musst du beachten, das bei Ponyprog die Fuses genau 
umgedreht gesetzt werden müssen! Also wenn du ein Fusebit auf 1 setzen 
willst, musst du den Hacken rausnehmen! Wenn es 0 sein soll, muss ein 
Hacken rein.

Gruss Stefan

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Die Fuses in PonyProg hab ich nach dem Screenshot aus dem PDF von Pollin 
gesetzt. Die sollten also eigentlich passen, wenn sich bei PonyProg nix 
geändert hat, das Pollin wahrscheinlich eine ältere Version verwendet 
hat.

Am Hyperterminal kommt nix an, was mich inzwischen aber auch nicht mehr 
wundert.
Ich glaub ich mach erstmal schluss mit dem µC Zeugs...

GRüße und danke für eure Hilfe!

Autor: Christian Erker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meines Wissens wurde das Board teilweise mit einem Summer OHNE 
Elektronik ausgeliefert, ist zumindest hier im Forum gelegentlich zu 
lesen.

Das würde zumindest das "nur knacken" erklären.

Gruß,
Christian

Autor: Mati (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ KamikazeProgrammierer

Das alte römische Imperium wurde auch nicht in einem Tag erschaffen ....
Bleib locker und versuch's noch mal...

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Taster sind Falsch verschaltet und rufen genau dieses verhalten 
hervor.
So ändern das sie nach Masse schalten voila.

Der "Summer" ist ein Lautsprecher daher nur knacken.
Ausserdem ist er zu niederohmig.




http://www.mikrocontroller.net/articles/Pollin_ATM...

http://www.mikrocontroller.net/articles/AVR_Checkliste

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

Hmm... Das mit dem Summer hab ich mir schon gedacht...


Nur was muss ich an den Tastern ändern, damit sie nach Masse schalten?
Könnt ihr mir das genau erklären, da ich bei den Pullup Widerständen 
noch nicht so viel Ahnung hab...

Danke!

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Testtool ist vermutlich viel älter als die Boardrevision und dessen 
Schaltung...

UART-Ausgabe sollte schon gehen, Bedingung ist natürlich, daß der AVR 
per Fuses auch so gestzt ist, daß er mit 8MHz Quarz läuft, wie es das 
Basic-Programm voraussetzt.

Naja, BasCom Demoversion nehmen und eben umprogrammieren oder was 
raufspielen, was bei jemandem, der die gleiche Boardversion hat, 
tatsächlich geht.

Und sinnvollen Programmieradpter besorgen oder alten Rechner mit echter 
COM nehmen.

Gruß aus Berlin
Michael

Autor: Stefan M. (celmascant)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, Pollin schein beim MAX232 immer 10microF- Elkos zu nehmen. Im 
Datenblatt des IC's sind aber bei allen Versionen 1micro verwendet!
Bei meinem Net-IO-Board ging der MAX232 erst nachdem ich die Elkos 
getauscht hatte! Beim Evoluation-Boad habe ich dann gleich 1micro 
eingebaut.

Die Taster sind für das Beispielpogramm schon richtig verschalten. Dort 
wird ja nach 1 und nicht nach 0 abgefragt.

Gruss Stefan

Autor: Erba57 Ba (orfix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo KamikazeProgrammierer,

bei  Testtool.bas  seht $crystal = 8000000 und was hast du verbaut, 
wahrscheinlich wenn es der org. Bausatz ist 16 Mhz.

Verwende mal den internen quarz siehe fuse einstellung
http://s-huehn.de/elektronik/avr-prog/avr-prog.htm

$crystal = 1000000

Sound geht nicht weil wie meine vorgänger richtig erkannt haben ein 
lautsprecher verbaut wurde. Ändere das programm

Beep:                                                     'Untermenü 
"Beep"

  Portd.7 = 1                                               'setzte den 
Pin 7 von Port D auf high
  Waitms 5                                                  'Warte 500 
ms
  Portd.7 = 0                                               'setzt den 
Pin 7 von Port D auf low
  Sound Portd.7 , 1000 , 100
Return                                                      'zurück zum 
Hauptmenü

Auch rs232 kann nicht funktionieren füge hier $baud = 4800 ein

In der PONYPROG2000.INI kannst du verify ausschalten
VerifyAfterWrite=NO

Bei mir läuft das Programm auf einen atmega8 ohne probleme

nur nicht gleich aufgeben, weithin ein schönen WE

mfg

orfix

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Erba57 Ba schrieb:
> Verwende mal den internen quarz siehe fuse einstellung
> http://s-huehn.de/elektronik/avr-prog/avr-prog.htm

Es gibt keinen internen Quarz, nur einen internen RC-Oszillator im AVR!

Gruß aus Berlin
Michael

Autor: Erba57 Ba (orfix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

danke für die richtig stellung, hab mich falsch ausgedrückt.
Hilft den KamikazeProgrammierer bestimmt weiter?

mfg

orfix

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hilft den KamikazeProgrammierer bestimmt weiter?

Ja, es hilft einem Anfänger sehr wohl weiter, wenn sachliche Fehler (die 
Jedem mal passieren, auch mir) nicht unwidersprochen stehen bleiben.

Ein Anfänger hat schon genug mit dem normalen Stoff zu tun, da ist jeder 
Fehler bzw. jede Unkorrektheit eine(r) zuviel.

...

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OT: Mein verkacktes Pollinboard hat sich heute verabschiedet, scheiss 
Ding.

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke nochmal für die Hilfe, orfix!!!

mein Programm muss also nun so aussehen?
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips

$crystal = 1600000                                          'definieren des verwendeten externen Quarz (16MHz)

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
Do                                                          '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

Loop                                                        'zum Anfang der Schleife

Beep:                                                       'Untermenü "Beep"

  Portd.7 = 1                                               'setzte den Pin 7 von Port D auf high

  Waitms 5                                                  'Warte 500ms

  Portd.7 = 0                                               'setzt den Pin 7 von Port D auf low

  Sound Portd.7 , 1000 , 100
Return                                                      'zurück zum Hauptmenü


Return                                                      'zurück zum Hauptmenü

Textausgabe:                                                'Untermenü "Textausgabe"

  Print "Atmel-Evaluation-Board"                            'Sende den Text in den Anführungszeichen über RS232 zum PC

Return    

Kann ich nicht auch anstatt des internen oszillators den externen Quarz 
nehmen? Dann müsste ich halt auch $crystal = 800000 von 800000 auf 
1600000 ändern, oder?

Danke nochmal für die Hilfe.

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ KamikazeProgrammierer: Lesen kannst du schon, ja? Dein Programm ist 
jedenfalls an mehreren Stellen fehlerhaft bzw kann verbessert werden, da 
das jeder sieht, der die Anleitung des Pollinboards, von Bascom oder 
deinen Quellcode gelesen hat, belasse ich es dabei...

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@dude:

Entschuldigung. Ich wüsste nicht, was ich noch verbessern könnte. Es 
wäre schon, wenn du mir das trotzdem kurz erklären könntest, da du 
sicherlich mehr weisst als ich. Wenn du nicht willst, dann musst du auch 
nicht.

Ich werde leider aber auch aus der Pollin Anleitung nicht schlau.

grüße, Jaki

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Waitms 5" wartet keinesfalls 500ms, sondern 5, der Buzzer "buzzt" 
selber, faengt also an zu piepen bei "PORTD.7 = 1", das Sound duerfe mit 
ihm garnicht funktionieren, deine Variablen nutzt du garnicht, die 
If-Schleifen kannst du einfach so schreiben:
If Pind.2 = 1 Then
Portd.5 = 1
End If

Die Sub's brauchst du nicht, die 16mhz sind 8mhz zuviel, denn auf dem 
Board sind nur 8mhz Quarze und intern geht auch nicht mehr...
Ich kann dir den Code gleich korrigieren, wenn ich vom einkaufen wieder 
da bin.

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

>Ich kann dir den Code gleich korrigieren, wenn ich vom einkaufen wieder
>da bin.

Super!

>Die Sub's brauchst du nicht, die 16mhz sind 8mhz zuviel, denn auf dem
>Board sind nur 8mhz Quarze und intern geht auch nicht mehr...

Meiner Meinung nach sind auf dem Board für den ATMega16 Sockel 16mhz 
Quarze.

Grüße, Jaki

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600 

Config Portd.2 = Input
Config Portd.3 = Input
Config Portd.4 = Input
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output

Do

If Pind.2 = 1 Then
Portd.5 = 1
End If

If Pind.3 = 1 Then
Portd.6 = 1
End If

If Pind.4 = 1 Then
Portd.7 = 1
Print "Atmel-Evaluation-Board"
End If

Loop
End
Sollte in etwa machen, was du machen wolltest, ich kanns ausserdem 
gerade nicht testen ;) Auf meinem Board sind 8MHZ-Quarze, sollten bei 
dir andere drauf sein, wird der PC nur Muell empfangen bei Print, siehst 
du dann ja...
Bei Fragen frag...

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>"Waitms 5" wartet keinesfalls 500ms, sondern 5, der Buzzer "buzzt"
>selber, faengt also an zu piepen bei "PORTD.7 = 1", das Sound duerfe mit
ist aber kein buzzer

http://www.mikrocontroller.net/articles/Pollin_ATM...

http://www.mikrocontroller.net/articles/AVR_Checkliste

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stefan M. (celmascant)
>Ich hab bis jetzt noch keinen USB-RS232-Wandelr gesehen, der mehr als
>RxD und TxD rausgibt!
Bis jetzt waren alle 5 Stück der Billigadapter voll belegt.
Haben aber teilweise nur 0V-(+5V) Pegel.


>Ach ja, Pollin schein beim MAX232 immer 10microF- Elkos zu nehmen. Im
>Datenblatt des IC's sind aber bei allen Versionen 1micro verwendet!
jo sind 10u

Christian Erker (Gast)
>Meines Wissens wurde das Board teilweise mit einem Summer OHNE
>Elektronik ausgeliefert, ist zumindest hier im Forum gelegentlich zu
>lesen.
30 Ohm

@Sachich Nich (dude)

>OT: Mein verkacktes Pollinboard hat sich heute verabschiedet, scheiss
>Ding
Was soll schon kaputt gehen bei diesen Teil;-)

>Die Sub's brauchst du nicht, die 16mhz sind 8mhz zuviel, denn auf dem
>Board sind nur 8mhz Quarze und intern geht auch nicht mehr...

Bei mir 1 8MHz und 2 16MHz

mal sehen wenn ich es testen kann.

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, vom Pollinboard gibt es wohl ziemlich viele verschiedene Versionen 
:D
Ich weiss nicht was kaputt gegangen ist, von einem Mal aufs andere 
konnte ich nicht mehr flashen, Serielle Schnittstelle funktioniert in 
anderen Anwendungen noch, verschiedene Controller und *.hex getestet, 
Transistor getauscht, nichts.
Ist mir auch egal was es ist, das Ding ist ersetzt...

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

ich hab nun das Programm, das dude oben gepostet hat compiliert und 
geflasht. Natürlich mit 16000000 als Quarzwert.

Beim Taster 1 geht LED 1 an.
Beim Taster 2 geht LED 2 an.
Soweit alles ok.

Bei Taster 3 passiert nichts.
Beim Resetten knackt der Piezo wenn davor TAster 3 gedrückt wurde.

grüße, Jaki

Autor: Erba57 Ba (orfix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo  KamikazeProgrammierer,

mit den dude programm kannst du die led einschalten aber leider nicht 
mehr aus, (außer reset)

bei taster 3 zieht die spule des lautsprecher an, das wars dann auch.

probier doch mal dein ursprüngliches programm, müsste besser 
funktionieren.

bei mit funktionierts auch ohne quarz, fusebits

füg mal Sound Portd.7 , 1000 , 100   ein

mfg

orfix

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich hab jetzt mal ein bisschen rumprobiert.
Funktioniert auch alles mehr oder weniger ;-)

jetzt hab ich nochmal mein erstes eigenes Programm geschrieben, oder 
eher vom Testtool abgeändert.
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips

$crystal = 16000000                                         'definieren des verwendeten externen Quarz (8MHz)

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)

Portd.5 = 1
Portd.6 = 0

Main:                                                       'Hauptprogramm
Do                                                          'Anfang der Schleife

  Waitms 1000
  Toggle Portd.5                                            '...setze Pin 5 von Port D von high auf low oder umgekehrt
  Toggle Portd.6                                            '...setze Pin 6 von Port D von high auf low oder umgekehrt


Loop                                                        'zum Anfang der Schleife

Das funktioniert super!

könntet ihr mir nich sagen, für was
Dim A As Byte
Dim B As Byte

ist? Ist das eine Variablendeklaration? Für was wird die im Testprogramm 
benötigt?

Grüße, Jaki

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
omg...
@ Erba57 Ba: Es reicht,
Sound Portd.7 , 1000 , 100
in mein Programm einzufuegen bzw. meinen Teil mit Portd.7 zu ersetzen. 
Wenn du die Verwendung des Originalprogramms empfiehlst (ich will mich 
nicht aufspielen), ist es wohl nicht weit her mit deinen 
Programmierkuensten...
@ KamikazeProgrammierer: rtfm! 
http://rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich bins wieder!

ich hab nochmal ein bisschen probiert, und es wird schon.

jetzt wollte ich aber die beiden LEDs abwechselnd blinken lassen, was 
auch schon gut klappt. Die Geschwindigkeit aber über die beiden Taster 
zu verändern geht noch ncith, da Bascom beim prüfen der Syntax Fehler 
meldet.
Ich habe keine Fehler mehr gefunden, aber bascom meckert bei der IF 
Bedingung rum und benötigt ein "loop" mehr.

Code:
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips

$crystal = 16000000                                         'definieren des verwendeten externen Quarz (8MHz)

Dim Zeit As Integer
Zeit = 500                                                  'dimensionieren der verwendeten Variablen

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)

Portd.5 = 1
Portd.6 = 0

Main:                                                       'Hauptprogramm
Do                                                          'Anfang der Schleife

  Waitms Zeit
  Toggle Portd.5
  Toggle Portd.6

  If Pind.2 = 1 Then Decr Zeit
  Else If Pind.3 = 1 Then Incr Zeit
  End If

Loop   

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Lt.Bascom-Hilfe:

Syntax:

IF expression THEN

[ ELSEIF expression THEN ]

[ ELSE ]

END IF

MfG Spess

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

so gibt bascom aber nochmehr warnungen aus. Könnte das einer netterweise 
korrigieren?
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips

$crystal = 16000000                                         'definieren des verwendeten externen Quarz (8MHz)

Dim Zeit As Integer
Zeit = 500                                                  'dimensionieren der verwendeten Variablen

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)

Portd.5 = 1
Portd.6 = 0

Main:                                                       'Hauptprogramm
Do                                                          'Anfang der Schleife

If Pind.2 = 1 Then Decr Zeit

Elseif Pind.3 = 1 Then Incr Zeit

Else

END IF

Loop 

Danke!

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Streich das Main: und das zweite Else

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Was soll dieses sinnlose 'ELSE'?

MfG spess

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$regfile = "m16def.dat"                                     'definieren 
des verwendeten Chips

$crystal = 16000000                                         'definieren 
des verwendeten externen Quarz (8MHz)

Dim Zeit As Integer
Zeit = 500 
'dimensionieren der verwendeten Variablen

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)

Portd.5 = 1
Portd.6 = 0

                                                       'Hauptprogramm
Do                                                          'Anfang der 
Schleife

If Pind.2 = 1 Then Decr Zeit

If Pind.3 = 1 Then Incr Zeit



Loop

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ KamikazeProgrammierer: Du solltest mal lesen lernen! In der 
Bascom-Hilfe ist eindeutig die Syntax beschrieben fuer ein- und 
mehrzeilige If-Abfragen, du hast keinen Schimmer, was do loop oder xyz: 
return machen usw...

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke für's korrgigieren!

Das "sinnlose" Else hab ioch da hingesetzt, weil ich dachte, dass man da 
noch ein else braucht. Da er da aber nichts tun soll, habich nichts 
dahintergeschrieben.

@dude: Doch, ich weiss, was do loop bedeutet. ein bisschen habe ich 
nämlich schon gelernt!

grüße!

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KamikazeProgrammierer schrieb:

> @dude: Doch, ich weiss, was do loop bedeutet. ein bisschen habe ich
> nämlich schon gelernt!

Nein, dann wuerdest du weder nach den damit zusammenhaengenden Fehlern 
fragen noch main: davor setzen.

Autor: KamikazeProgrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!
Irgendwie funktioniert das Programm schonwieder nicht...

$regfile = "m16def.dat"                                     'definierendes verwendeten Chips

$crystal = 16000000                                         'definierendes verwendeten externen Quarz (8MHz)

Dim Zeit As Integer
Zeit = 500                                                  'dimensionieren der verwendeten Variablen

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

Portd.5 = 1
Portd.6 = 0

                                                             'Hauptprogramm
Do                                                          'Anfang derSchleife

If Pind.2 = 1 Then Decr Zeit

If Pind.3 = 1 Then Incr Zeit

Waitms Zeit
Toggle Portd.5
Toggle Portd.6



Loop

wenn ich die Taster drücke, ändert sich nichts. Wenn ich die Taster 
gedrückt halte, bleibt das Blinken Stehen und nichts ändert sich.

Verbesserungen?

Grüße.

Autor: Ludwig D. (user111)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(ohne den ganzen Thread komplett gelesen zu haben)

Bitte prüfe doch, ob immer noch CLKOPT gesetzt ist!

Fusebit CLKOPT muß beim Pollin-Board für die "großen Atmegas" in der 
Regel genau umgekehrt gesetzt werden, wie in der Anleitung.

D.h. AUS statt AN (bei Ponyprog).

Und zwar immer dann, wenn die Taktfrequenz größer 8 Mhz ist.

Beim Pollinboard 2.01 gilt das für Atmega8, Atmega 16 und alles sonst im 
"großen" und "mittleren" Sockel.

Nur für die kleinen Attinys ist ein 8 Mhz Quarz vorgesehen ( Board 
Version 2.01 )

Früher waren womöglich überall 8 Mhz bestückt (siehe PDF und 
Beispiele....)

=> jetzt im Wiki nachgetragen Pollin ATMEL Evaluations-Board

Autor: NrDesign (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ KamikazeProgrammierer:

Dreh' den Input-Port mal um, dann müsste es klappen:
$regfile = "m16def.dat"                                     'definierendes verwendeten Chips

$crystal = 16000000                                         'definierendes verwendeten externen Quarz (8MHz)

Dim Zeit As Integer
Zeit = 500                                                  'dimensionieren der verwendeten Variablen

Ddrd = &B11100000                                           'definierender verwendeten Ports ( 1 = ausgang; 0= eingang)
Portd = &B11111111                                          'PullUp-Widerstände in PortD aktivieren

Portd.5 = 1
Portd.6 = 0

                                                             'Hauptprogramm
Do                                                          'Anfang derSchleife

'Weil die PullUps im PortD aktiv sind, müssen wir jetzt nach LOW prüfen.
If Pind.2 = 0 Then Decr Zeit

If Pind.3 = 0 Then Incr Zeit

Waitms Zeit
Toggle Portd.5
Toggle Portd.6

loop

Allerdings musst du dann die Taster nach Masse beschalten. Diese 
Inputmethode hat bei mir immer geklappt. Wenn du noch die Zeit dafür 
hast, hänge noch einen Widerstand á 1K ohm an den Pin nach Vcc, das gibt 
einen zusätzlichen PullUp, der den Controller unempfindlicher gegen 
Funkstörungen wie z.B. einen Lichtschalter in der Nähe macht.

NrDesign

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.