www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik erste Versuche mit Atmega8


Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
soll natürlich DDRB und PORTB heissen

Autor: Tim Hilden (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tim Hilden (Gast)
Datum:

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

Autor: wb1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LEDs sind Dioden.
Hast du sie in Flußrichtung angeklemmt?

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: juergen klauck (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).-}

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: juergen klauck (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: juergen klauck (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
??

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
brne?

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: juergen klauck (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du nochmal das komplette aktuelle programm anhängen

damit man sich nicht immer wiederholt..

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ser (set register) setzt keine Nullen sondern Einsen!

Autor: Noobie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.