Forum: Mikrocontroller und Digitale Elektronik ATTiny15 Portausgabe funktioniert nicht?!


von Andreas Geiger (Gast)


Lesenswert?

Hallo!

Bin blutiger Anfänger in der AVR-Programmierung und wollte fragen, ob
folgender Code für den ATTiny15 funkionieren möchte (Ich möchte auf
jeden 2. Pin 5V legen und damit eine LED zum leuchten bringen.) Leider
funktioniert das nicht. Ich benutze zum Assemblieren AVRStudio und zum
Programmieren PonyProg, da ich kein Board von Atmel habe (kann nicht
direkt debuggen).

-----------------------------------------------------
.include "tn15def.inc"

.DEF        mp = R16
.DEF        i  = R17
.DEF        j  = R18

main:

        ldi i,0x18  ;Watchdog ausschalten
        ldi j,0x00
        out WDTCR,i
        out WDTCR,j

        ldi        mp,0xFF ;alle Ports auf Ausgang
        out        DDRB,mp

loop:
        ldi        mp,0x55 ;jeden 2. Port setzen
        out        PORTB,mp
        rjmp loop
-----------------------------------------------------
Für eine Antwort wäre ich super dankbar!

Grüssle,

Andreas Geiger

von Hannes L. (hannes)


Lesenswert?

Hallo...

Was du da mit dem Wachhund anstellst, verstehe ich jetzt nicht.
Der ist nämlich beim Reset deaktiviert und braucht nicht behandelt zu
werden.

Der Rest (Datenrichtung in DDRB, Bitmuster in PORTB) ist in Ordnung und
müsste funktionieren.
Spiel das doch mal im Simulator von AVR-Studio durch (reine
Softwaresimulation ohne AVR-Hardware), da siehst du, was passiert.

Direkt debuggen kannst du den Tiny15 sowiso nicht. Das geht nur bei
einigen ganz neuen AVRs und einigen großen Megas. Dazu ist auch
spezielle Hardware erforderlich, die normalen
ATMEL-AVR-Programmiergeräte bzw. STK500 reichen dazu nicht aus.

...

von Andreas Geiger (Gast)


Lesenswert?

Hallo Hannes,

erstmal danke für deine Antwort!!!

Ich dachte mir auch, dass der Watchdog deaktiviert ist, aber genau
nachlesen konnt ich es nicht...

Die Ports sind doch dann abwechselnd über einen Widerstand an 5V
angeschlossen, also müsste eigentlich eine LED leuchten, oder?

Ich programmiere bei Ponyprog nur die FLASH Daten rein, da mekkert er
auch nicht und ich kann sie auch wieder auslesen. Also dachte ich es
müsste funktionieren, dass die Ports unterschiedlich gezogen sind (GND,
5V).

Oder muss ich sonst noch was "hochladen"?
Ich habe auch keine Direkten Seriell-Port sondern wg. Laptop einen
Prolific USB to Serial Adapter, hoffe nicht dass es daran liegt...

Muss ich den Reset eigentlich über Widerstand mit +5V verbinden oder
geht das auch direkt?

Auf deine Antwort freut sich...

Andreas

von Hannes L. (hannes)


Lesenswert?

Hi...

Puuuhhhh..... - Viele offene Fragen...

Also Reset gehört über einen Widerstand (3k...10k) an Vcc.
An GND und Vcc gehört unbedingt ein Keramik-C von etwa 100nF.

Bei Ponyprog kann ich nicht mitreden, das funktionierte bei mir anfangs
nicht, da baute ich mir etwas Eigenes (eigene Hardware, eigene
Software). Inzwischen weiß ich, dass es an der langen
Parallelportleitung (incl. Umschalter!) lag, habe Ponyprog aber nie
wieder probiert. Ich nutze trotz eines inzwischen angeschafften STK500
für ISP meist meine eigene Lösung, meist an einem Lappi über LPT.

Auch bei den USB-Adaptern fehlt mir die Erfahrung. Einige sollen gehen,
aber byteweises Protokoll mögen die nicht so, die sind (aufgrund des
USB-Protokolls) mehr für packetweisen Datentransfer geeignet.

Da dein Programm keine Interrupts nutzt, dürfte dein Programm (nach
Entfernen des Watchdogzugriffs) vollständig sein.

Wir hatten hier vor langer Zeit mal ein (eigentlich sinnloses) Projekt
mit Tiny15 in ASM erarbeitet, viele deiner Fragen werden dort geklärt.
Am besten, du liest dir diesen Thread mal durch und versuchst, das dort
Erklärte nachzuvollziehen.
http://www.mikrocontroller.net/forum/read-1-113815.html#115916

Auch dieser Beitrag könnte dir Hinweise zum Umgang mit dem Tiny15
geben:
http://www.mikrocontroller.net/forum/read-1-219705.html#219912

Frohes Schaffen...

...

von Andi K. (Gast)


Lesenswert?

Den Reset kannst Du zum stabilisieren mit 1K an +5V verbinden.
An den Reset halt dann noch die "Reset-Leitung" Deines Programmers,
was ja klar sein sollte.
Aber wie hast Du die LEDs nun angeschlossen?
Gegen +5V oder gegen GND?
Im ersten Fall geht eine LED an, wenn Du 0 (low) an den betreffenden
Portpin schaltest, im zweiten Fall bei 1 (high).
Probier mal 0xAA als Bitmuster.

MfG
Andi

von Andreas Geiger (Gast)


Lesenswert?

Hallo!

Vielen Dank erst mal für eure Antworten. Mit Reset 6k gegen +5V
funktioniert es einwandfrei. Das stand leider im Datenblatt nicht drin
und ich dachte da er eh als Ausgang konfiguriert ist... Wozu wird er
denn genau gebraucht?

Der Kondensator zwischen GND und Vcc ist zum Spannungen glätten, oder?

Was ich festgestellt habe:

Wenn ich bei einem anderen PC direkt über seriell rausgehe geht das
Programmieren in 2 Sekunden. Mein neuer Laptop mit Prolific USB to
Serial benötigt immer noch 3 Minuten. Das liegt dann wohl an oben
erklärtem Grund?! Weiß jemand wie man so einen Adapter beschleunigt,
oder geht das gar nicht?

Habe schon einige Einstellungen der Schnittstelle (baudrate, etc)
ausprobrobiert, war alles gleich langsam...

Viele Grüsse,

Andreas

von Rolf Magnus (Gast)


Lesenswert?

> Vielen Dank erst mal für eure Antworten. Mit Reset 6k gegen +5V
> funktioniert es einwandfrei. Das stand leider im Datenblatt nicht
> drin und ich dachte da er eh als Ausgang konfiguriert ist...

Du hast den Reset abgeschaltet?

> Wozu wird er denn genau gebraucht?

Also wenn du den Reset ausschaltest und statt dessen als Ausgang
benutzt, dann sollte der Widerstand nicht nötig sein. Ich bezweifle
aber mal, daß du das getan hast, denn dann könntest du kein ISP mehr
nutzen.
Und dann ist es eben so, daß low-Pegel am Reset-Eingang den Prozesser
resettet und außerdem zum Umschalten in den ISP-Modus benutzt wird. Um
das im Normalbetrieb zu verhindern, setzt man einen Widerstand ein, der
ihn auf high-Pegel zieht, aber so, daß der Programmer ihn auch wieder
auf low ziehen kann. Einen pull-up eben.
Ob dazu was im Datenblatt steht, weiß ich grad nicht, aber mehr kannst
du jedenfalls in der Appnote AVR042 "AVR Hadware Design
Considerations" nachlesen.

> Der Kondensator zwischen GND und Vcc ist zum Spannungen glätten,
> oder?

Er ist zum Abblocken von Spannungsspitzen. Auch das ist in AVR042
erklärt.

Zum USB kann ich nichts sagen.

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.