Hallo,
ich bin leider etwas schwach auf dem Gebiet der Analogelektronik. Ich
hoffe, ihr könnt mir weiterhelfen. Ich verwende einen ATMega88 und
möchte dort zu Testzwecken am Portpin PC2 ein Rechteck ausgeben
(Laufzeitmessung). Die steigende Flanke des Signal sieht gut aus, aber
die fallende Flanke ähnelt einer Entladekurve eines Kondensators. Ich
habe den Port als Ausgang definiert, interner Pullup ist vorhanden.
Mein Oszi hat eine Eingangsimpedanz von 1MOhm paralle zu 20pF. Die Zeit
der "Entladekurve" beträgt ca. 800us.
Ich bin für jede Hilfe dankbar!
Gruß
ewigerstudent74
Wenn Du den Port-Pin als Ausgang definiert hast, hast Du keinen Pull-Up.
Pull-Ups gibt's nur bei Eingängen.
Sicher, dass Dein Porgramm korrekt ist? Also DDRx setzen und PORTx
abwechselnd 0 und 1?
Ich täte sagen, dass dein Oszi das nicht packt. Wie war das noch? Wenn
man Rechteck messen will, muss die Frequenz 10mal höher sein oder
sowas, da sonst die Kanten rund werden.
Hallo,
der Tastkopf ist abgeglichen und das Oszi müsste das auch schaffen,
denn mit dem selben Oszi messe ich normalerweise noch hochfrequentere
Signale. Außerdem wird die steigende Flanke ja korrekt dargestellt.
Gruß
Ralf
Hallo Michael,
das Programm besteht aus 7 Modulen, also doch etwas zu umfangreich für
Copy&Paste. Aber das wesentlich habe ich bereits gepostet. Noch einmal
in Kurzform:
//Initialisierung:
// ...
DDRC = 0x00; // Alles Ausgänge
PORTC = 0x00; // Erst mal alles auf log "0" ziehen
// ...
// Irgendeine Funktion
void f(void)
{
// Flanke am Anfang der Funktion
PORTC |= 0x02; // log "1"
PORTC &= ~0x02; // log "0"
//... Hier geschieht etwas
// Flanke am Ende der Funktion
PORTC |= 0x02; // log "1"
PORTC &= ~0x02; // log "0"
}
Gruß
Ralf
...
//Initialisierung:
// ...
DDRC = 0x00; // Alles Ausgänge
...
Schon wieder!
DDRC muss mit 0xFF geladen werden, damit das Ausgänge werden, sonst
schaltest Du nur den PullUp an und aus.
Axel
Verdammt schon wieder einen Copy&Paste-Fehler gemacht. Ich sollte halt
nicht den fehlerhaften Code aus dem obigen Post verwenden. Ich weiß, es
muss DDRC=0xFF heißen. Habe ich auch so im Quelltext stehen.
Gruß
Ralf
Hallo Axel,
auf dem selben Board sitzt ein HF-Empfänger, welcher (Rechteck-)Signale
mit 9,6KBaud liefert. Diese Signale werden vom Oszi sauber dargestellt.
Gruß
Ralf
hi,
wenn deine flanken steil ansteigen und gedämpft abfallen könntest du
den ausgang ein wenig belasten, so dass er ein paar mA liefern müsste,
um die spannung aufrecht zu halten. ich würden einfach mal 1-5kohm vom
output gegen masse legen, dann sollte der pegel zackig
'runtergezogen' werden.
gruss, harry
@ewigerstudent74:
So wird das nichts...
Mach ein Testprogramm, das nichts anderes macht als in einer Schleife
den Port umschalten. Dieses Testprogramm lädst Du in Deinen Controller
und dann machst Du eine neue Messung und berichtest.
Und bitte genau dieses Testprogramm posten. Ich wette immer noch auf
Programmierfehler!!!
Also ich würde den Ausgang auch erstmal mit nem 10 k Widerstand oder so
belasten, dass dürfte es verbessern. Wenn es nicht geht, nimm halt
einen schnellen Schmitt Trigger, der dürfte dann ein sauberes Rechteck
liefern.
Viele Grüße,
Micha
@Michael Lippert:
Das ist doch Blödsinn, mit dem Belasten des Ausgangs!
Die AVR-Microkontroller haben Push/Pull-Ausgänge. D.h. wenn am Ausgang
eine '0' ausgegeben wird, schaltet ein interner Mosfet den Pin nach
Masse, und wenn eine '1' ausgegeben wird, schaltet ein anderer Mosfet
den Pin nach VCC.
"ewigerstudent74" hat noch immer nicht erklärt, wo sein "interner
Pullup" beim Ausgang herkommen soll, und hat noch kein korrektes
Testprogramm geschrieben und gepostet.
Es gibt für sein Problem genau zwei Möglichkeiten: Softwarefehler oder
Hardwaredefekt. Ich wette immer noch auf Softwarefehler!
Hallo,
danke für die Tipps. Ich habe jetzt in der Tat den Ausgang mit 1kOhm
gegen GND gezogen und das Signal sieht endlich mal nach Rechteck aus.
;o)
Vielen Dank!
Gruß
Ralf
Dann ist mit Sicherheit der untere FET der Ausgangsstufe durchgebrannt.
(durch einen Kurzschluss gegen Vcc)
Leg den Pin mal per Software auf Low und häng einen 1k Pullup dran.
Normalerweise müssten dann trotzdem nahezu 0V anliegen.
Hier vermute ich aber 5V.
Jetzt macht euch mal locker. Ihr habt ja recht, dass da was nicht
stimmt. Ich werde dem ganzen auch noch auf den Grund gehen, aber für
einen kleinen Testpin tut's erst mal die 10kOhm-Variante.
@ Michael (ein anderer): Ich glaube ein Testprog, welches einen Pin
invertiert bekomme ich gerade noch hin. Und mehr als DDRC und PORTC
braucht man dafür auch nicht.
Trotzallem danke für die Hilfe.
Gruß
Ralf
Schalte mal mehr als ein Pin des selben Ports um, dann kannst Du
vergleichen.
Sonst kann ich mich nur dem anderen Michael und Benedikt anschließen:
Entweder unterer Fet defekt oder SW falsch (statt des Ports auf Low
wird das Direction-Register auf Eingang geschaltet.
Effektiv das Gegenteil von Open Collector / Open Drain, also Open
Source (diesmal nicht SW-OpenSource, sondern HW-OpenSource)).
Ob ihr glaubt oder nicht, ich kenn leute die hatten das gleiche problem
(ich)...und ewig den fehler gesucht und dann bemerkt, dass sie einen
kondensator dran hängen hatten. Naja....kommt vor.