Forum: Mikrocontroller und Digitale Elektronik erste Versuche mit Atmega8


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Noobie (Gast)


Lesenswert?

Hallo,
habe nun mal das LED beispiel aus dem AVR Tutorial mit PonyProg auf den
Atmega8 (auf der Starterplatine) geschrieben. Allerdings egal was ich
mache, die pins von PB haben immer die gleichen Spannungen. alle 0V,
bis auf PB4, der liegt immer auf 5V.
Wenn ich nun eine LED mit Widerstand an einen der Pins mit 0V an Vcc
anschliesse geht die Spannung an dem Pin auf 3,45V hoch und die LED
leuchtet nicht. Hat also einen gigantischen Innenwiderstand.

das Programm:
.include "4433def.inc"       ;Definitionsdatei einbinden, ggf. durch
                             ;2333def.inc ersetzen

         ldi r16, 0xFF       ;0xFF ins Arbeitsregister r16 laden
         out DDRC, r16       ;Inhalt von r16 ins IO-Register DDRB
ausgeben

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

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

woran kann das liegen?

mfg

von Noobie (Gast)


Lesenswert?

soll natürlich DDRB und PORTB heissen

von Tim Hilden (Gast)


Lesenswert?

also:

1. im Text redest du von PB4, setzt aber in deinem Code immer die
C-Ports.
2. hast du wirklich einen 4433er oder einen Mega8? Dann muesstest du
auch die ".inc" aendern
3. Ich weiss nicht wie das bei einem 4433 ist, aber mein 8252 hat einen
pin, mit dem man die Programmausfuehrung von einem externen Speicher
aktivieren kann, der pin heisst EA. Der muss auf V+ sein, wenn man
internen code ausfuehren will. Ist das DIng gar nicht angechlossen ist
das ungut. Den Fehler hatte ich naemlich mal mit selbigem Ergebnis.

TIM

von Tim Hilden (Gast)


Lesenswert?

zu 1.: verdammt, da habe ich zulange mit dem Tippen gebraucht ;-)

von wb1 (Gast)


Lesenswert?

LEDs sind Dioden.
Hast du sie in Flußrichtung angeklemmt?

von Noobie (Gast)


Lesenswert?

die include Datei war falsch. Aber mit der richtigen (m8def.inc) ändert
sich dennoch nichts. Wenn ich an einen PB Pin mit 0V die LED anlöte (in
Flussrichtung) steigt die Spannung auf 3,85V. Was ja nicht passieren
würde wenn sie verkehrt rum eingelötet wäre.
Komischerweise steigt das Potential der anderen PB Pins dann von 0V auf
1,35V.
Einen EA Pin gibt es laut Datenblatt nicht.

von juergen klauck (Gast)


Lesenswert?

hi
an port B haengt auch die ISP (mosi miso ckl...)
solltest schauen ob der uC ueber ISP geprog wird
ansonsten hatte ich nur "aerger" mit port C weil der nur 7 bit hat
(ich hab halt nur 7 gefunden).-}

von Noobie (Gast)


Lesenswert?

ich hab das Programm schon mit ISP übermittelt. Aber wenn die Ports auf
Output sind würde das ja bedeuten dass der µC gar keine neuen Befehle
entgegen nehmen kann.

Im Tutorial ist es aber auch so beschrieben, sollte dann doch auch
funktionieren.

von Chris (Gast)


Lesenswert?

Nein, das eine hat mit dem anderen nichts zu tun.
Während des gesamten ISP-Programmierens ist RESET auf Low, dein
Programm läuft also gar nicht. Dem ISP-Programmer ist das Programm auf
dem AVR also völlig egal.


> Wenn ich an einen PB Pin mit 0V die LED anlöte
Diesen Satz verstehe ich nicht. Lötest du etwa bei angeschalteter
Spannung eine LED an den AVR?


Zeig bitte mal deine Schaltung. Einmal mit, einmal ohne LEDs (das
Schaltbild kannst du hier im Forum anhängen). Und wie du gemessen hast.
Wenn ein eingeschalteter Port nämlich 0V hat, kann das auch an einem
Kurzschluss nach GND liegen.

von Noobie (Gast)


Lesenswert?

nein nein, ich löte natürlich nicht unter Spannung. ich meinte wenn ich
die LED (mit Vorwiderstand) an einen Pin anlöte der 0V hat wenn die LED
nicht dran ist.

Schaltung ist einfach das Starterkit hier aus dem Shop und eben einem
1k Widerstand und LED zwischen Vcc am µC und PB1.

von Hubert.G (Gast)


Lesenswert?

Hallo
Falls du wirklich das C-Port nimmst, hast du hoffentlich auch AVCC mit
VCC und  AGND mit GND verbunden. Die 3,45V sind 5V minus Diodenspannung
der LED, das heisst der Ausgang ist hochohmig und der Port nicht aktiv.
Mess einmal vom Pin nach Plus und dann nach Minus.
Hubert

von Noobie (Gast)


Lesenswert?

>Die 3,45V sind 5V minus Diodenspannung der LED,
>das heisst der Ausgang ist hochohmig und der Port nicht aktiv.

schon klar, aber warum? Das Programm legt den Wert doch fest. (?)

>Mess einmal vom Pin nach Plus und dann nach Minus.

erstaunlicherweise kommt bei der Summe der Teilspannungen nicht die zu
erwartetenden 5V raus, sondern bloss 4V. Kann doch eigentlich nur
bedeuten dass die Spannungsversorgung ihren Mann nicht steht.

Übrigens sind die Pins gar nicht auf 0V (waren sie bloss solange der
ISP dran hing), sondern auf 1,5V, obwohl sie auf low programmiert
wurden.

von Thorsten (Gast)


Lesenswert?

> bei der Summe der Teilspannungen nicht die zu erwartetenden 5V
> raus, sondern bloss 4V

Ja das kenne ich, hat ewig gedauert, bis ich herausgefunden habe, daß
ein Volt an korrodierten Kontaken abgefallen ist.

von juergen klauck (Gast)


Lesenswert?

> Nein, das eine hat mit dem anderen nichts zu tun.

na ja
wenn man den isp stecker nicht abzieht haengt ja noch was an port b
zb. ne led und so nen zeug.-}
juergen

von Noobie (Gast)


Lesenswert?

also ich hab jetzt nochmal auf PortB 0b11111100 geschrieben (wie im
Tutorial). Danach den ISP abgehängt, Potential gemeßen und raus kam,
dass auf alles PB´s genau 1,00V liegen !??
was ist das denn nun?
Ich dachte entweder 5 oder 0V.
ein schlechter Kontakt kann es auch nicht sein denn zwischen der Maße
an der ich immer messe und Vcc liegen die ordnungsgemäßen 5V an und
dass alle PB Pins gleichermassen schlechte Kontakte habe wäre wohl ein
zu großer Zufall.

Verstehe das nicht, kann doch nicht so schwer sein bei einem µC ein Pin
von Low auf High oder umgekehrt zu kriegen.

von juergen klauck (Gast)


Lesenswert?

schreib doch erst mal ne schleife (mit delays 200ms >) und schalte hin
und her, an aus oder sonst was
dann siehste zumindest ob der port auch wirklich als ausgang laueft
sonst mal mit sbi und cbi rumspielen

von Hubert.G (Gast)


Lesenswert?

Also ich habe jetzt bei meinem Testboard noch mal gemessen.
PD5 als Ausgang, daran ist über 100k ein BC458 der eine LED treibt.
Am Ausgang sind bei H 4,9V bei L 0,02V.
Ich schalte mit einer Taste am Port C den PD5 zwischen H und L.

von Noobie (Gast)


Lesenswert?

so eine Alternierung wollte ich jetzt machen, aber da der Atmega8
anscheinend kein jne kennt, weiss ich nicht wie ich die Warteschleife
machen soll.
So hatte ich mir das gedacht:
         mov r19, 0
schleife4:
   mov r18, 0
schleife3:
         mov r17, 0

schleife2:
         add r17, 1
         cp r17, 250
         jne schleife2
         add r18, 1
         cp r18, 250
         jne schleife3
         add r19, 1
         cp r19, 250
         jne schleife4

diese Schleife sind grob 16 Millionen Schritte was also eine Sekunde
dauern würde. Aber ich kann im Instruction Set Manual keinen Befehl
finden der so ähnlich wie jne wäre.
??

von Tobi (Gast)


Lesenswert?

brne?

von ...HanneS... (Gast)


Lesenswert?

Ich verwende jetzt nur noch die Mnemonics, die im jeweiligen
AVR-Datenblatt (ganz weit hinten) aufgelistet sind, denn die
6502-Mnemonics, die ich mal kannte, funktionieren beim AVR irgendwie
nicht...  Auch mit den 8085-Mnemonics kommt der AVR nicht kloar...
;-D

von juergen klauck (Gast)


Lesenswert?

hi!

delay5ms:                               ;5ms Pause
           ldi  temp1, $C4
WGLOOP0:   ldi  temp2, $87
WGLOOP1:   dec  temp2
           brne WGLOOP1
           dec  temp1
           brne WGLOOP0
           ret
 ;Längere Pause für manche Befehle
delay50ms:                               ;50ms Pause
           ldi  temp3, 10
WGLOOP2:   rcall delay5ms
           dec  temp3
           brne WGLOOP2
           ret

ps keine gewaehr fuer die zeiten

von Noobie (Gast)


Lesenswert?

also wenn ich den im Wechsel von 0 auf 1 schalte dann passiert gar nix.
Genauso wie zuvor.
Kann es sein dass der kaputt ist ??

Ist ein Ausgangslevel von 1,35V überhaupt normal/möglich ?

soweit ich das überblicke sind alle verwendeten Befehle aus den
Mnemonics.

von Tobi (Gast)


Lesenswert?

kannst du nochmal das komplette aktuelle programm anhängen

damit man sich nicht immer wiederholt..

von Noobie (Gast)


Lesenswert?

ser r16             ;Nullen ins Arbeitsregister r16 laden
         out $18, r16       ;Inhalt von r16 ins IO-Register DDRB
ausgeben



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

das ist ein Beispiel aus dem Datenblatt des ATMega8

von ...HanneS... (Gast)


Lesenswert?

ser (set register) setzt keine Nullen sondern Einsen!

von Noobie (Gast)


Lesenswert?

stimmt, hab die Kommentare nicht erneuert
ist ja auch egal, ob ich nun mit ser 1en oder mit clr Nullen schreibe,
das Output-Potential an allen Pins ist immer 1,35V

von ...HanneS... (Gast)


Lesenswert?

Nooby, schick den Polter mal her (mit frankiertem Rückumschlag), ich
schau mir das mal an und schicke es garantiert zurück. Postadresse
kannste per Mail erfragen...

...HanneS...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.