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
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
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.
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).-}
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.
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.
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.
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
>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.
> 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.
> 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
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.
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
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.
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.
??
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
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.
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
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
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...