Forum: Mikrocontroller und Digitale Elektronik Assemblercode zu Testzwecken


von Sven Scholz (Gast)


Lesenswert?

Hallo,

nachdem ich mich jetzt stundenlang um den Verstand gelötet habe, möchte
ich nun meine Schaltung auch auf Herz und Nieren testen. Darum habe ich
zunächst eine LED an den Port PB0 gehängt. Mir fehlt jetzt eigentlich
nur noch der passende Assemblercode, um diese LED zum blinken zu
bringen.  Es wäre nett von euch, wenn ihr hier ein kleines
Beispielprogramm posten könntet, dass meine LED alle 5sek. aufleuchten
lässt für etwa 1sek.
Ich benutze übrigens einen 4MHz Oszillator.

Vielleicht gibt es ja sogar einen Code, bei dem das Blinken nach
einiger Zeit immer schneller wird...

Danke, schon mal im Voraus!

von Martin S. (Gast)


Lesenswert?

Dir ist aber schon bewußt, daß Assemblercode prozessorspezifisch ist?

Mit welchem Werkzeug möchtest du denn den Assemblercode übersetzten?
Und mit welchem Werkzeug bekommst du die Binärdateien in deinen
Prozessor?

von Sven Scholz (Gast)


Lesenswert?

Also ich benutze AVRStudio in der Version 4.11

Die Binärdatei möchte ich ganz normal mit dem ISP übertragen.

von Rufus, das dicke Ei (Gast)


Lesenswert?

Achja, und welcher MC ist das denn nun?

von Benjamin (Gast)


Angehängte Dateien:

Lesenswert?

Blink etwas schneller aber sollte reichen ansonsten noch ne
warteschleife drüber;-)

von Sven Scholz (Gast)


Lesenswert?

Nachdem ich die Hex-Datei geflasht habe, startet das Programm dann
eigentlich sofort oder muss ich erst noch ein RESET durchführen?

von Thomas Burkhardt (Gast)


Lesenswert?

Hi,

normalerweise setzt der Programmer RESET und gibt's nach dem
Programmieren wieder frei, so dass das Programm ansich gleich beginnt.

Die Funktion des Programms hängt allerdings doch davon ab, welchen µC
du verwendest und welcher da drinnen steht...

von Benjamin (Gast)


Lesenswert?

Sollte eigentlich sofort starten aber ein Reset schadet auch nicht. Habe
es eben bei mir Probiert und da hatt es prima gefunzt...
Habe allerdings angenommen das du einen Mega8 benutzt...

von Benjamin (Gast)


Lesenswert?

Eventuell reicht es bei nem anderen ATMEL die m8def.inc in die Passende
Datei abzuändern....

von Sven Scholz (Gast)


Lesenswert?

Mmmmhh, also das flashen meines AtMega8 funktioniert anwandfrei. Doch
irgendwie bekomme ich kein High-Signal am PB0-Port heraus? Woran könnte
das liegen? Die Versorgungsspannung von 5V habe ich auch überall
überprüft, sonst würde das Schreiben/Auslesen ja auch nicht
funktionieren. Ich bin am Verzweifeln...

An meinem PB0-Port liegt ein 470Ohm wiederstand, dann kommt meine LED
und das ganze liegt dann an Vcc. Das ist doch so richtig oder?

Oder mache ich beim assemblieren irgendwie einen Fehler? Ich lade halt
immer die .hex-Datei, die mir AVRStudio 4 herausgibt mit PonyProg2000
hoch. Und wie gesagt, da bekomme ich immer ein successful.

Helft mir bitte... DANKE

von Sven Scholz (Gast)


Lesenswert?

Was ich auch nicht ganz verstehe. Wenn ich den Quellcode mit AVRStudio
simuliere, dann gehen alle PB-Port auf HIGH und verharren in diesem
Zustand. Sprich: Es findet überhaupt kein blinken statt. Stimmt das
denn so?

von Benjamin (Gast)


Lesenswert?

Ja bei der Simulation wird kein Blinken statfinden. Durch die Schleifen
die zur erzeugung der Pause dienen bleibt die LED beim Simulieren
solange an bis du 0xFF*0xFF mal die Schleife durchlaufen hast.

Eventuell mal mit nen Messgerät überprüfen was ausm PORT rauskommt.

von Simon Küppers (Gast)


Lesenswert?

Sicher dass du PortB hast? Beachte: der ist beim Mega 8  ziemlich
"zerstückelt" verteilt. Hast du die LEDs richtig angeschlossen?

von Sven Scholz (Gast)


Lesenswert?

Also die LED habe ich ganz links unten (PIN 14) angeschlossen. Wie
gesagt erst Widerstand 470Ohm und dann LED zu Vcc hin...

von Santa Klaus (Gast)


Lesenswert?

Vorschlag: Versuch, folgende beiden noch wesentlich einfacheren
Programme zu Laufen zu bringen:

Programm A:

---------------------------------------
.include "m8def.inc"

ldi r16,0xFF    ;PortB als Ausgang
out DDRB,r16

clr r16      ;AN
out PORTB,r16

loop:
rjmp loop
---------------------------------------


Programm B:

---------------------------------------
.include "m8def.inc"

ldi r16,0xFF    ;PortB als Ausgang
out DDRB,r16

ldi r16,0xFF            ;AUS
out PORTB,r16

loop:
rjmp loop
---------------------------------------

Nach dem Starten der Programme solltest Du den entsprechenden Pegel an
den Pins von Port B mit einem Multimeter messen können (wenn nicht,
wurde das Programm nicht korrekt übertragen oder der Controller ist
defekt).  Ist das der Fall, klemmst Du die LED an.  Leuchtet daraufhin
die LED ordnungsgemäß (bzw. nicht je nach Programm), kannst Du Dein
Blink-Programm flashen.  Wenn die LED dann nicht blinkt, weißt Du, daß
es am Programm liegen muß.

von Santa Klaus (Gast)


Lesenswert?

Noch ein Tip: Rechne mal aus, wie schnell Dein Testprogramm die LED
blinken läßt.  Wenn die LED nämlich 1000 mal pro Sekunde blinkt, dann
blinkt sie, aber Du siehst sie nicht blinken (sondern konstant mit
etwas verminderter Helligkeit leuchten).  Blinkt die LED dagegen mit
einem Takt von 5 min, dann blinkt sie auch, aber das siehst Du nur,
wenn Du mindestens 10 min draufgeguckt hast. Fazit: Es ist sinnvoll,
sich vorher zu vergewissern, daß die Blinkfrequenz im Sekundenbereich
liegt.

von Sven Scholz (Gast)


Lesenswert?

Muss ich das eigentlich als Intel-HEX oder als Generic-HEX assemblieren?
Oder kann es vielleicht sein, dass ich irgendwie vergessen habe einen
PORT zu beschalten?

Was ist eigentlich mit dem RESET-Eingang vom Atmega8? Das ist denn so
richtig, dass der andauernd auf HIGH liegt? Wofür ist der
47pF-Kondensator in der Schaltung?

von Santa Klaus (Gast)


Lesenswert?

>Was ist eigentlich mit dem RESET-Eingang vom Atmega8? Das ist denn so
>richtig, dass der andauernd auf HIGH liegt?

Der RESET-Pin liegt andauernd auf High, aber wenn Du Dich nicht der
Möglichkeit der ISP-Programmierung berauben willst, ist es
empfehlenswert, ihn nicht direkt, sondern z. B. über einen 10
kOhm-Widerstand auf 5 V zu legen.

>Wofür ist der 47pF-Kondensator in der Schaltung?

Er dient zur Unschädlichmachung hochfrequenter Störsignale, falls es
solche gibt.  Für die grundsätzliche Funktion der Schaltung ist er
nicht erforderlich. Sein Fehlen dürfte bei Deinem Aufbau nichts
ausmachen.

von Sven Scholz (Gast)


Lesenswert?

ES FUNKTIONIERT !!! BIN TOTAL AUS DEM HÄUSCHEN !

Also an der Schaltung hat es nicht gelegen, die war einwandfrei. (was
ich eigentlich gar nicht fassen kann, bei den ganzen Lötungen)

Ich hatte beim kompilieren eine falsche Option angeklickt und immer den
falschen Code hochgeladen ich Dussel. Da sitzt man stundenlang am löten
und basteln und dann sowas. Echt bescheuert... Auf jeden Fall blinkt
die LED jetzt lustig vor sich hin...

Ich danke euch für eure zahlreichen Postings...

PS: Ich mach jetzt erst mal ne Flasche Sekt auf...

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.