Forum: Mikrocontroller und Digitale Elektronik Blutiger Anfänger


von Peter B. (pebez)


Lesenswert?

Hallo Wissende,

ich bin absoluter Anfänger daher vorab.......tschuldigung.

Ich habe mit einem Lernpaket von Franzis angefangen

http://www.franzis.de/elektronik/lernpakete-elektronik/lernpaket-mikrocontroller-technik-mit-bascom

Die Sache interessiert mich sehr und ich möchte gern weitermachen.
Übermütiger Weise habe ich mir das STK500 zugelegt, um die selben Dinge 
aus dem Lernpaket auf die DIL Atmegas zu flashen.
Von Bascom habe ich die DEMO Version (war im Lernpaket dabei).
Das Lehrboard hat einen Schnittstellenwandler und einen Bootloader 
vorinstalliert und man kann damit direkt in Bascom loslegen.

Jetzt habe ich den Programmer in Bascom vom MCS Bootloader auf das
STK500 umgestellt. Beim flashen eines .bas Programms reagiert das STK500
genau so wie es soll: Led 3,4 und 5 flackern, die Statusled wechselt von
rot nach gelb nach grün. Aber danach passiert nix mehr. Ich dachte das 
nun
das Programm ausgeführt wird,
Hier der .bas Code:

       'Blinken

$regfile = "m88def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 32
$framesize = 40

Config Portb.6 = Output
Config Portb.7 = Output
Led1 Alias Portb.7
Led2 Alias Portb.6

Do

Toggle Led1
Waitms 50
Toggle Led2
Waitms 50

Loop

aber nix passiert auf dem STK500. Nun habe ich ja einen Taufrischen
Atmega88 aufgesteckt. Muss der vorbereitet werden?

Kann mir jemand Haarklein erklären, wie ich mit einem "frischen" Chip
umgehen muss, damit er das geflashte Programm ausführt?
STW: Bootloader usw.

Bitte entschuldigt die etwas verwirrende Fragestellung, aber noch kenne
ich mich mit nix so richtig aus.

Gruß  Peter

von Martin V. (oldmax)


Lesenswert?

Hi
Willkommen in der Welt der Zeitlosen.... Da hast du dir ein schönes 
Hobby ausgesucht, Freizeit ade. Wollen mal sehen. Der Schreibvorgang hat 
deiner Meinung nach funktioniert? Sind die LED's richtig gepolt? Sind 
Vorwiderstände eingebaut, sonst besteht die Gefahr, das diese nur einmal 
(kurz ) aufleuchten. Nach dem Basic-Code kann ich nicht gehen, dafür 
kenne ich zu wenig. Wenn du aber aus einem Lehrbuch ein Beispiel 
genommen hast, denke ich, das es nicht am Programm liegt. Nun zu 50 ms. 
Das ist eine sehr kurze Zeit, darüber solltest du dir im klaren sein. Da 
ist es möglich, das du kein Flackern siehst, sondern ein gleichmäßiges 
Leuchten oder Glimmen. Du solltest dir grundsätzlich bewußt sein, paßt 
das Programm zu dem, was du erwartest.
Gruß oldmax

von Peter B. (pebez)


Lesenswert?

Hallo oldmax,

die "Grundlagen" der Elektronik habe ich drauf, also Vorwiderstand bei
Led kenne ich. Ich meine aber hier die LED's auf dem STK500.
Die 10pol. Kabel für LED's und Switches sind gesteckt. Wenn ich den im
STK500 mitgelieferten ATM8515 einstecke, läuft das Demoprogramm 
einwandfrei. Da werden die LED's auf dem Board binär gezählt usw.
Wenn ich aber meinen gekauften ATM88 einstecke und ein Programm drauf 
flashe passiert mit den LED'S auf dem STK500 nix, obwohl diese lt. 
Programm heftig blinken müssten. Nun denke ich, dass der "frische" Chip
erstmal irgendwie vorbereitet werden muss um überhaupt ein Programm 
abzuarbeiten.
Als Anfänger sage ich mal so eine Art "Formatierung"?

Da weiss ich aber nix genaues nicht.

Gruß  Peter

von Volker S. (volkerschulz)


Lesenswert?

Hallo Peter.

1.) Der ATMEGA88 ist im Auslieferungszustand auf den internen Oszillator 
mit 8er-Vorteiler gefust. Er laeuft demnach mit 1MHz internem Takt. Die 
Zeile
1
$crystal = 8000000
macht also schonmal nicht so viel Sinn. Stell die Fuses mal auf externen 
Takt ohne Vorteiler und benutz den Takt des STK500

2.) Wozu wird
1
$baud = 9600
gesetzt?

3.) Die Portpins B6 und B7 sind ungluecklich gewaehlt. Diese Pins sind 
beim MEGA88 ausgerechnet die Pins fuer den externen Takt!


Volker

von MWS (Gast)


Lesenswert?

Peter,

> macht also schonmal nicht so viel Sinn. Stell die Fuses mal auf externen
> Takt ohne Vorteiler und benutz den Takt des STK500

Lass als Anfänger die Finger vom Umstellen der Clock Fuses, 
verkompliziert die Geschichte nur, der M88 läuft auch mit internem Takt.

Die falsche Einstellung von $crystal = 8000000 hat nur zur Folge, daß 
Waitms 50 in Wirklichkeit 400ms dauert.

Solange die Ports nicht anders definiert sind, kannst Du PortB.6/7 
problemlos nehmen. Durch die Zeile $Baud = xxx wird allerdings das UART 
eingeschaltet, PortD.0/1 ist damit nicht anders verwendbar.

Hast Du den richtigen Sockel im STK500 benutzt, Green, 2, SPROG2 ?
Und vor allem, ist PortB.6/7 auch per Jumperkabel mit den Statusleds des 
STK500 verbunden ? Sonst bleibt's dunkel :D

Dein Code läuft übrigens.

von Volker S. (volkerschulz)


Lesenswert?

MWS schrieb:
> Peter,
>
>> macht also schonmal nicht so viel Sinn. Stell die Fuses mal auf externen
>> Takt ohne Vorteiler und benutz den Takt des STK500
>
> Lass als Anfänger die Finger vom Umstellen der Clock Fuses,
> verkompliziert die Geschichte nur, der M88 läuft auch mit internem Takt.

Natuerlich laeuft der auch mit internem Takt, dafuer ist er ja da. ;) 
Das hindert das STK500 jedoch nicht, den Takt an genannten Pins zur 
Verfuegung zu stellen. Dafur muesste man es um-jumpern, was in etwa so 
schwierig sein duerfte, wie eine Fuse zu setzen...


> Die falsche Einstellung von $crystal = 8000000 hat nur zur Folge, daß
> Waitms 50 in Wirklichkeit 400ms dauert.

Richtig... und dass er schon ganz bald wieder nachfragt, weil er die 
UART benutzen will... :)


> Solange die Ports nicht anders definiert sind, kannst Du PortB.6/7
> problemlos nehmen. Durch die Zeile $Baud = xxx wird allerdings das UART
> eingeschaltet, PortD.0/1 ist damit nicht anders verwendbar.

Wie oben geschrieben, kommt der Takt vom STK500 auf B6/7 an, egal wie 
die Fuses im uC gesetzt sind, es sei denn man jumpert das STK500 um.


Volker

von Peter B. (pebez)


Lesenswert?

Hallo MWS,

die Clock Fuse habe ich im AVR-Studio geändert.
Ich habe NUR die CKDIV8 deaktiviert. Damit sollte der A88 auf 8 MHz 
laufen.

MWS schrieb:
> Hast Du den richtigen Sockel im STK500 benutzt, Green, 2, SPROG2 ?
>
> Und vor allem, ist PortB.6/7 auch per Jumperkabel mit den Statusleds des
>
> STK500 verbunden ? Sonst bleibt's dunkel :D

Green 2 und SPROG 2 sind klar, aber was für ein Jumperkabel ?????
Das 10 pol. Kabel von PORTB -> LED's und das 10 pol. Kabel
PORTD-> Switches steckt, aber das sind doch keine Jumper??

VTARGET, AREF, RESET, XTAL1, OSCSEL, BSEL2 und PJUMP habe ich nicht
angetastet, die sind so wie im Auslieferungszustand gesteckt.

Gruß  Peter

von Volker S. (volkerschulz)


Lesenswert?

Peter Bednarz schrieb:
> Hallo MWS,
>
> die Clock Fuse habe ich im AVR-Studio geändert.
> Ich habe NUR die CKDIV8 deaktiviert. Damit sollte der A88 auf 8 MHz
> laufen.

OK


> Green 2 und SPROG 2 sind klar, aber was für ein Jumperkabel ?????
> Das 10 pol. Kabel von PORTB -> LED's und das 10 pol. Kabel
> PORTD-> Switches steckt, aber das sind doch keine Jumper??

Doch.


> VTARGET, AREF, RESET, XTAL1, OSCSEL, BSEL2 und PJUMP habe ich nicht
> angetastet, die sind so wie im Auslieferungszustand gesteckt.

Wenn Du unbedingt den internen Takt des uC verwenden willst, dann zieh 
den Jumper XTAL1...


Volker

von MWS (Gast)


Lesenswert?

> Wie oben geschrieben, kommt der Takt vom STK500 auf B6/7 an, egal wie
> die Fuses im uC gesetzt sind, es sei denn man jumpert das STK500 um.

Letzter Teil des Satzes ist ausschlaggebend, natürlich muss das STK500 
für den jeweiligen µC entsprechend konfiguriert sein, für internen Takt 
dann die OSCSEL eben ungejumpert.

> PORTD-> Switches steckt, aber das sind doch keine Jumper??

Peter,

mit Jumperkabel hab' ich Verbindung der Leds mit PortB bezeichnet.

> VTARGET, AREF, RESET, XTAL1, OSCSEL, BSEL2 und PJUMP habe ich nicht

Volker schrieb's schon, nimm' den externen Clock weg.

Zur Sicherheit alle Jumper laut DB mit Deinem STK500 verglichen ?

von Volker S. (volkerschulz)


Lesenswert?

MWS schrieb:
> Letzter Teil des Satzes ist ausschlaggebend, natürlich muss das STK500
> für den jeweiligen µC entsprechend konfiguriert sein, für internen Takt
> dann die OSCSEL eben ungejumpert.

Dann haengt der Pin allerdings immernoch rueckwaerts am 
Spannungswandler. Also besser XTAL1 ent-jumpern. ;)


Volker

von Peter B. (pebez)


Lesenswert?

Hallo Volker,

ich will nicht unbedingt den internen Takt verwenden.
Mir gehts um folgendes:
Ich möchte auf dem STK500 erreichen, dass nach dem flashen des A88 auf
dem STK500 die LED's so blinken wie sie es lt. Programm sollten.
Quasi ein "visuelles Erfolgserlebnis" für: alles richtig gemacht.

Das Blinkerprogramm ist nur ein Test, sonst nichts.......


Der mit dem STK mitgelieferte A8515 spielt ja sein Testprogramm
(LED 0 - 7 werden über Taster binär hochgezählt usw.).

Nur wenn ich meinen "frischen A88" mit meinem "Blinker" flashe tut sich
auf dem STK500 nix, außer das er mir den Flashvorgang erfolgreich 
meldet.

Ich sitze erst heute Abend wieder vor meinem STK500.
Frage: Muss die UART denn nicht angesprochen werden? Dann würde ich
$baud 9600 einfach weglassen? Hauptsache die LED's blinken erst einmal.

Welche PORTS könnte ich denn bedenkenlos für OUTPUT nehmen?

Gruß  Peter

von Karl H. (kbuchegg)


Lesenswert?

> Ich möchte auf dem STK500 erreichen, dass nach dem flashen des A88 auf
> dem STK500 die LED's so blinken wie sie es lt. Programm sollten.
> Quasi ein "visuelles Erfolgserlebnis" für: alles richtig gemacht.
>
> Das Blinkerprogramm ist nur ein Test, sonst nichts.......

Dann benutze andere Pins als PB6 und PB7

Wenn du in Zukunft einen Portpin benutzen willst (ok, ok, irgendwann 
kennt man die auswendig), dann schau zuerst im Datenblatt nach, ob 
dieser Pin eine Doppelbelegung hat und welche das ist. Das ist einer der 
wichtigen Punkte: Sich klar machen, dass nicht jeder Pin für jede 
Aufgabe gleich gut geeignet ist, dass einige Pins durch ihre 
Spezialfunktionen einem das Leben extrem erleichtern können und das 
einige Pins überhaupt nicht benutzt werden können während einige andere 
eine Defaultbelegung haben, die man mit einer Fuse auch umstellen kann.

> Ich sitze erst heute Abend wieder vor meinem STK500.
> Frage: Muss die UART denn nicht angesprochen werden?

Gegenfrage: Gibt dein Programm etwas über die UART aus oder empfängt sie 
etwas?
Nein?`
Wozu willst du die UART dann initialisieren?

> Welche PORTS könnte ich denn bedenkenlos für OUTPUT nehmen?

Port B ist schon ok. Aber eben nicht diese beiden Pins.
Ansonsten: Hol dir das Datenblatt von Atmel, dort ist am Anfang eine 
schöne Graphik deines Prozessors mit allen Pins und ihrer Belegung.
Du wirst es sowieso brauchen. Also hol es besser gleich.

von Volker S. (volkerschulz)


Lesenswert?

Peter Bednarz schrieb:
> Hallo Volker,
>
> ich will nicht unbedingt den internen Takt verwenden.
> Mir gehts um folgendes:
> Ich möchte auf dem STK500 erreichen, dass nach dem flashen des A88 auf
> dem STK500 die LED's so blinken wie sie es lt. Programm sollten.
> Quasi ein "visuelles Erfolgserlebnis" für: alles richtig gemacht.
>
> Das Blinkerprogramm ist nur ein Test, sonst nichts.......

Ja, war mir schon klar. Mit internem Takt und XTAL1 gezogen muesste es 
gehen. Ansonsten zum Testen einfach mal Pins B0 und B1 verwenden.


> Ich sitze erst heute Abend wieder vor meinem STK500.
> Frage: Muss die UART denn nicht angesprochen werden? Dann würde ich
> $baud 9600 einfach weglassen? Hauptsache die LED's blinken erst einmal.

Fuer's Blinkenlassen brauchst Du die UART nicht, also die Zeile einfach 
weglassen... ;)


> Welche PORTS könnte ich denn bedenkenlos für OUTPUT nehmen?

Siehe oben. Sogenannte "Alternativfunktionen" haben jedoch alle Pins. 
Siehe Datenblatt unter "Pin Configuration" oder "Pinout".


Volker

von Chris (Gast)


Lesenswert?

Hallo, Peter!

Tu dir selbst einen Gefallen und verzichte auf Bascom. Programmiere 
deinen Controller in Assembler. Nur so lernst Du ihn wirklich richtig 
kennen (auch wenn es sehr kompliziert erscheint). Schau dir dazu einfach 
das AVR-Tutorial an. Später kannst Du dann auf C umsteigen.
Ich möchte hier keine Diskussion über Bascom/nicht Bascom starten, ist 
nur ein gut gemeinter Rat von mir.

von Peter B. (pebez)


Lesenswert?

Hallo,

mannoman geht das hier schnell........:D

Man kommt ja mit dem Antworten gar nicht mehr nach..:D

Also der OSCSEL steckt zur Zeit auf PIN 2-3 (Auslieferzustand 1-2=3)

Muss der OSCSEL ganz weg oder auf 1-2 gesteckt werden?

Werd ich heute abend direkt mal ausprobieren.

Vielen Dank erst mal an alle bis hierher, wenn es funzt werde ich es 
berichten.

Gruß  Peter

von tom (Gast)


Lesenswert?

Hallo Peter,

am besten nicht einfach nur nachmachen, was hier geschrieben wird. 
Versuche es zu verstehen. Guck Dir den Schaltplan vom STK500 an, dann 
werden Dir die Bedeutungen der Jumper schnell selbst klar. Wenn Du auf 
andere Pins ausweichst, ist es egal wie der Jumper steckt, dann kommts 
nur auf die Fuses an.

von MWS (Gast)


Lesenswert?

> Muss der OSCSEL ganz weg oder auf 1-2 gesteckt werden?

Volkers Rat ist hier besser, unjumpere XTAL1.

Zu $Baud, sobald Bascom das findet, wird das UART initialisiert, also 
lass es raus.

von Peter B. (pebez)


Lesenswert?

Hallo zusammen,

bin jetzt zuhause an mein STK500 und.............ES FUNKTIONIERT !!!!!

Ich habe den XTAL1 entjumpern müssen UND PORTB.0 und PORTB.1 genommen.

SUPER............

Was hab ich daraus gelernt ?

1. Hier wird mein Stammforum
2. Interner Takt wird mit FUSE CKDIV8 ein oder ausgeschaltet
3. Bevor man anfängt, erst den MC und seine Pins studieren.
4. Jumper Tabelle für STK500 auswendig lernen.
5. Werde den Rat von Chris und Tom ernsthaft befolgen.
6. Ich habe ein tolles Hobby gefunden.

Nochmals vielen Dank an alle Beteiligten.

P.S. Werde euch noch oft genug löchern :D

Gruß  Peter

von spess53 (Gast)


Lesenswert?

Hi

>2. Interner Takt wird mit FUSE CKDIV8 ein oder ausgeschaltet

Nein.

>4. Jumper Tabelle für STK500 auswendig lernen.

Oder auf der Unterseite des STK nachsehen.

MfG Spess

von Volker S. (volkerschulz)


Lesenswert?

spess53 schrieb:
>>2. Interner Takt wird mit FUSE CKDIV8 ein oder ausgeschaltet
>
> Nein.

Genau... mit CKDIV8 wird der interne Takt-Teiler geschaltet.


Volker

von Hannes L. (hannes)


Lesenswert?

Volker Schulz schrieb:
> spess53 schrieb:
>>>2. Interner Takt wird mit FUSE CKDIV8 ein oder ausgeschaltet
>>
>> Nein.
>
> Genau... mit CKDIV8 wird der interne Takt-Teiler geschaltet.

Naja, sagen wir mal "voreingestellt". Denn man kann auch per Firmware 
den Takt-Teiler verändern, was die Voreinstellung der Fuse überschreibt. 
Ich bevorzuge deshalb die Einstellung per Software.

>
>
> Volker

...

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.