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


von KamikazeProgrammierer (Gast)


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!

von KamikazeProgrammierer (Gast)


Lesenswert?

Achja: manchmal passiert das komische verhalten auch gleich am Anfang...

Sorry für den Doppelpost!

von spess53 (Gast)


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

von Martin V. (oldmax)


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

von Michael U. (amiga)


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

von Martin V. (oldmax)


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

von KamikazeProgrammierer (Gast)


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

von Martin V. (oldmax)


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

von m. keller (Gast)


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.

von KamikazeProgrammierer (Gast)


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

von KamikazeProgrammierer (Gast)


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

von Karl H. (kbuchegg)


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.

von KamikazeProgrammierer (Gast)


Angehängte Dateien:

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:
1
'--------------------------------------------------------------------------'
2
'                        Testtool.bas                                      '
3
'                   2006 ,Pollin Electronic                                '
4
'                          Freeware                                        '
5
'--------------------------------------------------------------------------'
6
'                                                                          '
7
'Pollin Electronic Atmel-Evaluation-Board                                  '
8
'Bestellnummer: 810022                                                     '
9
'Testprogramm für ATmega16                                                 '
10
'Der gesendete Text kann mit dem Hyperterminal von Windows angezeigt werden'                                                               '
11
'Einstellungen am Hyperterminal:                                           '
12
'              Bits pro sekunde:   9600                                    '
13
'              Datenbits       :      8                                    '
14
'              Parität         :  keine                                    '
15
'              Stoppbits       :      1                                    '
16
'              Flusssteuerung  :  keine                                    '
17
'                                                                          '
18
'--------------------------------------------------------------------------'
19
20
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips
21
22
$crystal = 8000000                                          'definieren des verwendeten externen Quarz (8MHz)
23
24
Dim A As Byte                                               'dimensionieren der verwendeten Variablen
25
Dim B As Byte
26
27
Ddrd = &B11100000                                           'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
28
Portd = &B00000000                                          'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)
29
30
31
Main:                                                       'Hauptprogramm
32
Do                                                          'Anfang der Schleife
33
34
  If Pind.2 = 1 Then                                        'Wenn an Pin 2 von Port D ein high level anliegt, dann...
35
36
  Toggle Portd.5                                            '...setze Pin 5 von Port D von high auf low oder umgekehrt
37
  Bitwait Pind.2 , Reset                                    'warte bis an Pin 2 von Port D wieder ein low level anliegt
38
39
  End If                                                    'Ende der Bedingung
40
  If Pind.3 = 1 Then                                        'Wenn an Pin 3 von Port D ein high level anliegt, dann...
41
42
  Toggle Portd.6                                            '...setze Pin 6 von Port D von high auf low oder umgekehrt
43
  Bitwait Pind.3 , Reset                                    'warte bis an Pin 3 von Port D wieder ein low level anliegt
44
45
  End If                                                    'Ende der Bedingung
46
  If Pind.4 = 1 Then                                        'Wenn an Pin 2 von Port D ein high level anliegt, dann...
47
48
  Gosub Beep                                                '...gehe zum Untermenü "Beep"
49
  Gosub Textausgabe                                         '...gehe zum Untermenü "Textausgabe"
50
  Bitwait Pind.4 , Reset                                    'warte bis an Pin 4 von Port D wieder ein low level anliegt
51
52
  End If                                                    'Ende der Bendingung
53
54
Loop                                                        'zum Anfang der Schleife
55
56
Beep:                                                       'Untermenü "Beep"
57
58
  Portd.7 = 1                                               'setzte den Pin 7 von Port D auf high
59
  Waitms 500                                                'Warte 500 ms
60
  Portd.7 = 0                                               'setzt den Pin 7 von Port D auf low
61
62
Return                                                      'zurück zum Hauptmenü
63
64
Textausgabe:                                                'Untermenü "Textausgabe"
65
66
  Print "Atmel-Evaluation-Board"                             'Sende den Text in den Anführungszeichen über RS232 zum PC
67
68
Return                                                      'zurück zum Hauptmenü

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

von Stefan M. (celmascant)


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

von KamikazeProgrammierer (Gast)


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!

von Christian Erker (Gast)


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

von Mati (Gast)


Lesenswert?

@ KamikazeProgrammierer

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

von ich (Gast)


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_ATMEL_Evaluations-Board

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

von KamikazeProgrammierer (Gast)


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!

von Michael U. (amiga)


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

von Stefan M. (celmascant)


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

von Erba57 B. (orfix) Benutzerseite


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

von Michael U. (amiga)


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

von Erba57 B. (orfix) Benutzerseite


Lesenswert?

Hallo Michael,

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

mfg

orfix

von Hannes Lux (Gast)


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.

...

von Sachich N. (dude) Benutzerseite


Lesenswert?

OT: Mein verkacktes Pollinboard hat sich heute verabschiedet, scheiss 
Ding.

von KamikazeProgrammierer (Gast)


Lesenswert?

Hi!

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

mein Programm muss also nun so aussehen?
1
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips
2
3
$crystal = 1600000                                          'definieren des verwendeten externen Quarz (16MHz)
4
5
Dim A As Byte                                               'dimensionieren der verwendeten Variablen
6
Dim B As Byte
7
8
Ddrd = &B11100000                                           'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
9
Portd = &B00000000                                          'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)
10
11
12
Main:                                                       'Hauptprogramm
13
Do                                                          'Anfang der Schleife
14
15
  If Pind.2 = 1 Then                                        'Wenn an Pin 2 von Port D ein high level anliegt, dann...
16
17
  Toggle Portd.5                                            '...setze Pin 5 von Port D von high auf low oder umgekehrt
18
  Bitwait Pind.2 , Reset                                    'warte bis an Pin 2 von Port D wieder ein low level anliegt
19
20
  End If                                                    'Ende der Bedingung
21
  If Pind.3 = 1 Then                                        'Wenn an Pin 3 von Port D ein high level anliegt, dann...
22
23
  Toggle Portd.6                                            '...setze Pin 6 von Port D von high auf low oder umgekehrt
24
  Bitwait Pind.3 , Reset                                    'warte bis an Pin 3 von Port D wieder ein low level anliegt
25
26
  End If                                                    'Ende der Bedingung
27
  If Pind.4 = 1 Then                                        'Wenn an Pin 2 von Port D ein high level anliegt, dann...
28
29
  Gosub Beep                                                '...gehe zum Untermenü "Beep"
30
  Gosub Textausgabe                                         '...gehe zum Untermenü "Textausgabe"
31
  Bitwait Pind.4 , Reset                                    'warte bis an Pin 4 von Port D wieder ein low level anliegt
32
33
  End If                                                    'Ende der Bendingung
34
35
Loop                                                        'zum Anfang der Schleife
36
37
Beep:                                                       'Untermenü "Beep"
38
39
  Portd.7 = 1                                               'setzte den Pin 7 von Port D auf high
40
41
  Waitms 5                                                  'Warte 500ms
42
43
  Portd.7 = 0                                               'setzt den Pin 7 von Port D auf low
44
45
  Sound Portd.7 , 1000 , 100
46
Return                                                      'zurück zum Hauptmenü
47
48
49
Return                                                      'zurück zum Hauptmenü
50
51
Textausgabe:                                                'Untermenü "Textausgabe"
52
53
  Print "Atmel-Evaluation-Board"                            'Sende den Text in den Anführungszeichen über RS232 zum PC
54
55
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.

von Sachich N. (dude) Benutzerseite


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...

von KamikazeProgrammierer (Gast)


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

von Sachich N. (dude) Benutzerseite


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:
1
If Pind.2 = 1 Then
2
Portd.5 = 1
3
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.

von KamikazeProgrammierer (Gast)


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

von Sachich N. (dude) Benutzerseite


Lesenswert?

1
$regfile = "m16def.dat"
2
$crystal = 8000000
3
$baud = 9600 
4
5
Config Portd.2 = Input
6
Config Portd.3 = Input
7
Config Portd.4 = Input
8
Config Portd.5 = Output
9
Config Portd.6 = Output
10
Config Portd.7 = Output
11
12
Do
13
14
If Pind.2 = 1 Then
15
Portd.5 = 1
16
End If
17
18
If Pind.3 = 1 Then
19
Portd.6 = 1
20
End If
21
22
If Pind.4 = 1 Then
23
Portd.7 = 1
24
Print "Atmel-Evaluation-Board"
25
End If
26
27
Loop
28
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...

von ich (Gast)


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_ATMEL_Evaluations-Board

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

von juppi (Gast)


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.

von Sachich N. (dude) Benutzerseite


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...

von KamikazeProgrammierer (Gast)


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

von Erba57 B. (orfix) Benutzerseite


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

von KamikazeProgrammierer (Gast)


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.
1
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips
2
3
$crystal = 16000000                                         'definieren des verwendeten externen Quarz (8MHz)
4
5
Dim A As Byte                                               'dimensionieren der verwendeten Variablen
6
Dim B As Byte
7
8
Ddrd = &B11100000                                           'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
9
Portd = &B00000000                                          'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)
10
11
Portd.5 = 1
12
Portd.6 = 0
13
14
Main:                                                       'Hauptprogramm
15
Do                                                          'Anfang der Schleife
16
17
  Waitms 1000
18
  Toggle Portd.5                                            '...setze Pin 5 von Port D von high auf low oder umgekehrt
19
  Toggle Portd.6                                            '...setze Pin 6 von Port D von high auf low oder umgekehrt
20
21
22
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

von Sachich N. (dude) Benutzerseite


Lesenswert?

omg...
@ Erba57 Ba: Es reicht,
1
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

von KamikazeProgrammierer (Gast)


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:
1
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips
2
3
$crystal = 16000000                                         'definieren des verwendeten externen Quarz (8MHz)
4
5
Dim Zeit As Integer
6
Zeit = 500                                                  'dimensionieren der verwendeten Variablen
7
8
Ddrd = &B11100000                                           'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
9
Portd = &B00000000                                          'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)
10
11
Portd.5 = 1
12
Portd.6 = 0
13
14
Main:                                                       'Hauptprogramm
15
Do                                                          'Anfang der Schleife
16
17
  Waitms Zeit
18
  Toggle Portd.5
19
  Toggle Portd.6
20
21
  If Pind.2 = 1 Then Decr Zeit
22
  Else If Pind.3 = 1 Then Incr Zeit
23
  End If
24
25
Loop

von spess53 (Gast)


Lesenswert?

Hi

Lt.Bascom-Hilfe:

Syntax:

IF expression THEN

[ ELSEIF expression THEN ]

[ ELSE ]

END IF

MfG Spess

von KamikazeProgrammierer (Gast)


Lesenswert?

Hi!

so gibt bascom aber nochmehr warnungen aus. Könnte das einer netterweise 
korrigieren?
1
$regfile = "m16def.dat"                                     'definieren des verwendeten Chips
2
3
$crystal = 16000000                                         'definieren des verwendeten externen Quarz (8MHz)
4
5
Dim Zeit As Integer
6
Zeit = 500                                                  'dimensionieren der verwendeten Variablen
7
8
Ddrd = &B11100000                                           'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
9
Portd = &B00000000                                          'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)
10
11
Portd.5 = 1
12
Portd.6 = 0
13
14
Main:                                                       'Hauptprogramm
15
Do                                                          'Anfang der Schleife
16
17
If Pind.2 = 1 Then Decr Zeit
18
19
Elseif Pind.3 = 1 Then Incr Zeit
20
21
Else
22
23
END IF
24
25
Loop

Danke!

von Sachich N. (dude) Benutzerseite


Lesenswert?

Streich das Main: und das zweite Else

von spess53 (Gast)


Lesenswert?

Hi

Was soll dieses sinnlose 'ELSE'?

MfG spess

von Sachich N. (dude) Benutzerseite


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

von Sachich N. (dude) Benutzerseite


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...

von KamikazeProgrammierer (Gast)


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!

von Sachich N. (dude) Benutzerseite


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.

von KamikazeProgrammierer (Gast)


Lesenswert?

hi!
Irgendwie funktioniert das Programm schonwieder nicht...

1
$regfile = "m16def.dat"                                     'definierendes verwendeten Chips
2
3
$crystal = 16000000                                         'definierendes verwendeten externen Quarz (8MHz)
4
5
Dim Zeit As Integer
6
Zeit = 500                                                  'dimensionieren der verwendeten Variablen
7
8
Ddrd = &B11100000                                           'definierender verwendeten Ports ( 1 = ausgang; 0= eingang)
9
Portd = &B00000000                                          'definierender einzelnen Pins an einem Port ( 0= low level; 1= high level)
10
11
Portd.5 = 1
12
Portd.6 = 0
13
14
                                                             'Hauptprogramm
15
Do                                                          'Anfang derSchleife
16
17
If Pind.2 = 1 Then Decr Zeit
18
19
If Pind.3 = 1 Then Incr Zeit
20
21
Waitms Zeit
22
Toggle Portd.5
23
Toggle Portd.6
24
25
26
27
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.

von Ludwig D. (user111)


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

von NrDesign (Gast)


Lesenswert?

@ KamikazeProgrammierer:

Dreh' den Input-Port mal um, dann müsste es klappen:
1
$regfile = "m16def.dat"                                     'definierendes verwendeten Chips
2
3
$crystal = 16000000                                         'definierendes verwendeten externen Quarz (8MHz)
4
5
Dim Zeit As Integer
6
Zeit = 500                                                  'dimensionieren der verwendeten Variablen
7
8
Ddrd = &B11100000                                           'definierender verwendeten Ports ( 1 = ausgang; 0= eingang)
9
Portd = &B11111111                                          'PullUp-Widerstände in PortD aktivieren
10
11
Portd.5 = 1
12
Portd.6 = 0
13
14
                                                             'Hauptprogramm
15
Do                                                          'Anfang derSchleife
16
17
'Weil die PullUps im PortD aktiv sind, müssen wir jetzt nach LOW prüfen.
18
If Pind.2 = 0 Then Decr Zeit
19
20
If Pind.3 = 0 Then Incr Zeit
21
22
Waitms Zeit
23
Toggle Portd.5
24
Toggle Portd.6
25
26
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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.