PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe, 1. Programmierung



Barracuda_cy
29.04.2008, 16:09
Hi there!

So zuerst zur Hardware:

Atmel AVRISP mkII (war einer der "defekten" Serie, hab ihn upgedated!)
Atmel ATmega 32
Embedit AVR-32 Prototype-Board

(Win Vista Ultimate 32bit)
(AVR Studio 4.x)

So, nun wollte ich das 1. Programm welches die LED zum leuchten bringen soll auf meinen Mikrocontroller übertragen doch ich kann meinen Programmer nicht auswählen (also wenn ich "connect" wähle ist er da aber sobald ich auf "Assemble&Run drücke erscheint er nicht mehr in der Auflistung)

Bin noch totaler Neuling
Was muss ich anders einstellen im AVR-Studio?
Die Fuses? ODer was?

Helft mir pls;)

Greez

rideyourstyle
30.04.2008, 09:26
mach mal connect. dann öffnet sich ein fenster. auf der letzten registerkarte kannst du zum beispiel die spannung ablesen, die in deiner schaltung herrscht.
dieses fenster darfst du NICHT schliessen. sondern nur minimieren. so sollte es funktionierten....

Barracuda_cy
30.04.2008, 15:03
Wenn ich das mach öffnet siche in Fenster (bis dahin klappts;)) und dann ist die letzte Registerkarte "Auto" und da kann ich keine Spannung und nichts ablesen!
Ich weise nochmals darauf hin: Ich habe NICHTS konfiguriert, weis nicht ob das der Fehler ist.

Ah und wenn diese Fenster dann offen ist und ich "hintendran" auf "Build" klicke kommt nicht mal mehr ein Menü:S

JonnyP
30.04.2008, 19:58
Geh im AVR Studio mal in das Connect Menue, wähle Platform und Port und klicke auf Connect... Wenn das Studio eine Verbindung aufbauen kann erscheint das AVR-Menue. Auf der Registerkarte "Main" wählst du dein Device (den µC) und klickst auf "Read Signature". Es sollte dann ein Code erscheinen und die Nachricht " Signature matches selected device". Damit sollte für eine Übertragung des Programms alles klar sein. Der Assembler oder Compiler legt den Programm Code als Dateiname.hex ab. Auf der Registerkarte "Program" muss im Input Hex File der Pfad und Programmname.hex angegeben werden. (Schliesslich muss das Studio wissen, welches Programm in den µC transferiert werden soll). Mit der Taste "Program" wird die Programmierung gestartet.
Noch ein paar Hinweise: Der Atmega32 wird neu mit internem Takt 1MHz und aktiviertem JTAG geliefert Die Programmiergeschwindigkeit muss weniger als 1/4 des Taktes betragen. Wie das eventuell zu handeln ist, steht im Datenblatt des µP.

Barracuda_cy
30.04.2008, 20:34
SUper=)
Also, das mit der SIgnatur etc. hat alles schonma geklappt, hab auch das mit dem 1/4 des Taktes etc hinbekommen
NUr leuchtet meine LED noch nicht:

mit dem quelltext:

.include "m32def.inc" ; Definitionsdatei für den Prozessortyp einbinden

ldi r16, 0xFF ; lade Arbeitsregister r16 mit der Konstanten 0xFF
out DDRB, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben

ldi r16, 0b11111100 ; 0b11111100 in r16 laden
out PORTB, r16 ; r16 ins IO-Register PORTB ausgeben

ende: rjmp ende ; Sprung zur Marke "ende" -> Endlosschleife

(Kopiert von Mikrocontroller.net)

Was mach ich noch falsch?
Wenn ich alles connected hab wähle ich im Programm-Fenster vom AVR bei "Flash" das Input-HEx FIle des oben genannten QUelltextes aus. Wenn ich dan auf "Programm" klicke sagt er das er alles fertig und richtig programmiert hätte aber wenn ich dann die versorgungsspannung meines ATmega32 aus und wieder einschalte leuchtet die LED nicht:(

Könnt ihr mir noch den letzten Fehler zeigen den ich mache?;)

Besserwessi
30.04.2008, 21:15
Wie ist denn die LED angeschossen. Damit die bei dem Programm leuchtet, müßte sie an PORTB0 oder PORTB1 gegen VCC oder an PORTB2 .. PORTB7 nach GND angeschlossen sein. Mit Widerstand versteht sich natürlich.

Damit das Programm läuft muss eventuell der ISP Programmierer abgezogen werden (damit Rest auf High geht).

rideyourstyle
30.04.2008, 21:20
Nach meiner Erfahrung kann der ISP dran bleiben!
versuch einmal 0b00000000 und dann 0b11111111 in PORTB zu schreiben. wenn die LED falsch angeschlossen wäre, dann müsste in einen dieser beiden Fälle die LED leuchten...

JonnyP
01.05.2008, 11:56
Wenn du schon mal mit dem µC labern kannst, ist das schon die halbe Miete.
Dann solltest du dir bei Assembler angewöhnen, den Stack zu initialisieren (Check das ebenfalls mal im AVR-Tutorial bei Mikrocontroller.net; Stack und I/O). Bei mir wird eine LED so angeschlossen: +5V--R--LED--µC oder gnd.
(Da werden jetzt bestimmt wieder einige ausflippen, aber das ist AKTIV LOW und kompatibel mit älteren TTL-Schaltungen. Die meisten Logik-Bausteine sind aktiv low, deshalb sollte man sich das ruhig angewöhnen). Je nach verwendeter Diode ist bei 5V der Widerstand so 200 bis 300 Ohm groß und bevor du das an den µC hängst probier aus, ob die LED überhaupt leuchtet!
Ist das OK hängst du sie an einen Output Portpin, den du dann auf low schaltest.
Im interrupt vector RESET steht bei mir immer drin "jmp init". Unter dem label init wird dann der stack gesetzt un dann gehts weiter wie bei dir mit ldi r16...
Wenn die LED bei dir an B0 oder B1 angeschlossen ist müsste sie leuchten.

Barracuda_cy
18.05.2008, 17:44
So, problem hat sich erledigt
mit

-> 0b11111111
hats geklappt, doch was bedeutet das?

rideyourstyle
18.05.2008, 18:12
Das heisst, du schaltest alle Ausgänge von dem Port auf high (5V). Also hast du die LED vom AVR-Vorwiderstand-LED-Masse. Das heisst der Strom fliesst vom AVR über LED auf Masse ab.
Wenn du die LED anstelle von Masse auf 5V geschaltet hättest, dann könntest du sie mit 0b00000000 (=0x00 hexadezimal) zum Leuchten bringen...

0b11111111 = 0xFF ist übrigens da http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen sehr gut beschrieben!

Barracuda_cy
18.05.2008, 19:34
man dankt=)

und das hier schreib ich nur für die 15 Zeichen;)