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
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
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.
kannst du nochmal das komplette aktuelle programm anhängen damit man sich nicht immer wiederholt..
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.