Hallo,
vielleicht kann mir jemand weiterhelfen?
Bei meinem Atmega88 verhält sich PORTB anders als PORTC.
Mit dem PORTC steuer ich die Schaltung einer 4-stelligen
7-Segment-LED-Anzeige an. Die Schaltung mit gemeinsamer Anode wie hier
auf den Seiten im Tutoral abgebildetet ist.
Sobald ich die Segmente auf dem PORTB umlege und dann PORTB wie PORTC
ansteuere, passiert nichts mehr.
Alle PORTs habe ich als Ausgänge und gleich initialisiert.
Trotz aller Bemühungen im Atmega88 Handbuch etwas über die Unterschiede
oder ähnliches zu finden, habe ich bisher keine Lösung für mein Problem
gefunden.
Zu aller letzt habe ich auch schon den Controller gegen neue
ausgetauscht (unbenutzte) und bin zur simplen Programmierung mittel cbi
und sbi der einzelnen PORT-Ausgänge übergegangen. Alle nicht benötigten
Programmteile abgeschaltet und nur doch statische Ansteuerungen immer
wieder in verschiedenen Varianten (Bit-Muster) in den Controller
eingespielt.
Mit PORTB bekomme ich kein vernünftiges LOW-Signal hin, High-Pegel sind
in Ordnung nur die Low-Pegel liegen irgendwo dazwischen.
Programmieradapter ist dann auch nicht angeschlossen. Beim Programmieren
sind aktivietäten auf der Anzeige zu sehen, was darauf hinweist, das
etwas mit meinen Signalen aus dem Controller im Normalbetrieb nicht
stimmt.
Gibt es Unterschiede in der Hard- oder Software bei als Ausgängen
geschaltete PORTB und PORTC?
HIERMIT FUNKTIONIERT DIE ANZEIGE:
ldi tmp, 0b11111111 ; PortB (0-Input, 1-Output)
out DDRB, tmp
out DDRC, tmp
out DDRD, tmp
sbi PORTD, 4 ; Anzeige 1 anwählen
sbi PORTD, 5 ; Anzeige 2 anwählen
cbi PORTD, 6 ; Anzeige 3 anwählen
cbi PORTD, 7 ; Anzeige 4 anwählen
cbi PORTC, 0 ; Segment a anwählen
sbi PORTC, 1 ; Segment b anwählen
cbi PORTC, 2 ; Segment c anwählen
sbi PORTC, 3 ; Segment d anwählen
cbi PORTC, 4 ; Segment e anwählen
sbi PORTC, 5 ; Segment f anwählen
cbi PORTC, 6 ; Segment g anwählen
sbi PORTC, 7 ; Segment DP anwählen
HIERMIT FUNKTIONIERT DIE ANZEIGE NICHT:
ldi tmp, 0b11111111 ; PortB (0-Input, 1-Output)
out DDRB, tmp
out DDRC, tmp
out DDRD, tmp
sbi PORTD, 4 ; Anzeige 1 anwählen
sbi PORTD, 5 ; Anzeige 2 anwählen
cbi PORTD, 6 ; Anzeige 3 anwählen
cbi PORTD, 7 ; Anzeige 4 anwählen
cbi PORTB, 0 ; Segment a anwählen
sbi PORTB, 1 ; Segment b anwählen
cbi PORTB, 2 ; Segment c anwählen
sbi PORTB, 3 ; Segment d anwählen
cbi PORTB, 4 ; Segment e anwählen
sbi PORTB, 5 ; Segment f anwählen
cbi PORTB, 6 ; Segment g anwählen
sbi PORTB, 7 ; Segment DP anwählen
Irgendwie seltsam!
Kein STK500, sondern eigenständige Schaltung (Controller und
Steckanschlüße, also nackt) in mehrfacher und getesteter Ausführung.
Schaltungsaufbau auch schon mehrmals geprüft, alles in Ordnung.
Funktionstest immer ohne Programmieradapter. Programmieradapter ist eine
steckbare Version und kein Board wie das STK500.
Problem ist eigentlich, das ich PORTB noch nie als Ausgang wie PORTC
oder PORTD betreiben konnte und früher daher diesen als Eingang genutzt
habe.
Egal welche Schaltung ich verwende, über PORTB leuchten einfache
LED-Ansteuerungen (LED und Widerstand) nur Schwach. Sind aber
Grundsätzlich steuerbar (Ein, Aus), also das PORTB reagiert schon auf
die Befehle wie cbi und sbi. An den anderen PORTs leuchten die einfachen
LED-Ansteuerungen sehr hell.
Meine Programmierung erfolgt ausnahmslos in Assembler.
Gründe für dieses Verhalten des PORTB habe ich trotzt (geht schon über
Wochen so) lesen der Atmega88 Befehlsliste und der Hardwarebeschreibung
nicht finden können.
Ist es völlig egal an welchem Pin von PORTB Du eine LED anschließt?
Leuchtet sie an allen Pins nur schwach? Versuche es mal mit nur EINER
LED an allen Pins der Reihe nach. Wie sind die Fuses programmiert?
Die komplette Schaltung und das komplette Programm können auch nicht
schaden.
Viele Grüße
Hallo,
holger schrieb:
> Ich würde mal ALLE VCC und GND anschliessen.> Gehst du evtl. nur über AVCC rein?
Genau sowas würde ich auch vermuten...
Irgendwo fehlt entweder die Spannung oder ein GND.
Gruß aus Berlin
Michael
Hi
>>Darauf hin habe ich mir meine>>"m88def.inc" überprüft, und mußte feststellen,das ein Wert in der>>Zuweisung nicht in Ordnung war.>Wo genau?
Das möchte ich auch mal sehen.
MfG Spess
Der Wert für ".equ DDRB = 0x04" war verändert. Warum das bei mir so
war, ist mir ein Rätsel. Kann mir nicht vorstellen, das andere dort ein
Problem haben werden, da ich anscheinend der erste war, der ein PORTB
Problem mit dem Verhalten, wie weiter oben geshildert, hatte.
Ich ändere an dieser Datei nichts. Ansehen nur über eine duplizierte
Datei!
Hallo,
John schrieb:
> Ich ändere an dieser Datei nichts. Ansehen nur über eine duplizierte> Datei!
Na, wenn Du selbstverändernde Dateien auf Deinem Rechner hast, würde ich
das Studio lieber neu installieren, wer weiß, was sich da noch geändert
hat...
Gruß aus Berlin
Michael
>Na, wenn Du selbstverändernde Dateien auf Deinem Rechner hast, würde ich>das Studio lieber neu installieren, wer weiß, was sich da noch geändert>hat...
Ich würde darüber nachdenken eine neue Festplatte zu kaufen.
Wenn da schon Daten von alleine umkippen wird es höchste Zeit.
Hallo John,
benutze folgende Schaltung um ein leichtes Leuchten der nicht
angesteuerten Segmente (siehe Bild) zu unterdrücken. Wahrscheinlich hast
Du HDSP5551 rot eingesetzt. Habe für die Segmente 220er genommen.
Hatte mal ein ähnliches Symtom mit der *.inc Dateien. Kann nur sagen,
melde dich bei Atmel an und lade nur von dort dein Studio runter!
Schöner Aufbau deines Programms, auch wenn es nur zum Testen dienen
sollte.
Werde vielleicht mal einen Quellcode in Deinem Still nachschicken. Mal
sehen wie viel Zeit mir dafür bleibt.
Bis bald.
Jan