Forum: Mikrocontroller und Digitale Elektronik Kein Rechteck am Ausgang


von ewigerstudent74 (Gast)


Lesenswert?

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

von AxelR. (Gast)


Lesenswert?

Auch hallo,
wie hoch ist deine Frequenz am Portpin?
Gruß
AxelR.

von ewigerstudent74 (Gast)


Lesenswert?

Hallo Axel,

die Frequenz ist in dem Fall egal. Sobald ich den Pin auf log. "0"
ziehe, sehe ich diese Kurve am Oszi (ca. 800us).

Gruß
Ralf

von Michael (ein anderer) (Gast)


Lesenswert?

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?

von Simon Küppers (Gast)


Lesenswert?

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.

von Thorsten (Gast)


Lesenswert?

Wenn das Oszi es nicht packt, dann würde er was sinusähnliches sehen und
keine Entladekurve. Vielleicht ist der Tastkopf nicht abgeglichen?

von ewigerstudent74 (Gast)


Lesenswert?

Hallo Michael,

...
DDRC = 0x00;   // Alles Ausgänge
PORTC = 0x00;  // Erst mal alles auf log "0" ziehen
...
PORTC &= ~0x02;   // log "0"
PORTC |= 0x02;    // log "1"
...

Ich denke, dass müsste passen, oder?

Gruß
Ralf

von ewigerstudent74 (Gast)


Lesenswert?

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

von AxelR. (Gast)


Lesenswert?

Dann nimm doch mal einen Funktionsgenerator und sieh dir das da mal an.
Ich denke auch, das es am oszi liegt.

von dave (Gast)


Lesenswert?

Auweia! Ausgänge sind 0xFF!!!
DDRC = 0xFF <== RICHTIG

dave

von ewigerstudent74 (Gast)


Lesenswert?

Sorry,

Schreibfehler. Meinte natürlich DDRC=0xFF!!!

Gruß
Ralf

von ewigerstudent74 (Gast)


Lesenswert?

Ich hoffe, dass war jetzt kein Missverständnis. Ich habe im Quellcode
die richtige Zeile stehen. Habe mich nur hier im Forum verschrieben.

Gruß
Ralf

von Michael (ein anderer) (Gast)


Lesenswert?

Poste doch mal Deinen Quellcode per Copy&Paste. Sollte ja kurz sein. Ich
tippe immer noch auf Programm-Fehler...

von ewigerstudent74 (Gast)


Lesenswert?

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

von AxelR. (Gast)


Lesenswert?

...
//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

von ewigerstudent74 (Gast)


Lesenswert?

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

von AxelR. (Gast)


Lesenswert?

Nimm halt mal einen andren Rechteckgenerator (555), damit Du das Oszi
ausschliessen kannst!!

von ewigerstudent74 (Gast)


Lesenswert?

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

von AxelR. (Gast)


Lesenswert?

Dann mach mal ein oder zwei NOP's zwischen Setzen und löschen des
Portpins und probier dann mal, obs besser wurde.

von Mr_Boertsch (Gast)


Lesenswert?

Hast du schonmal dein Signal auf einem andere Pin Ausgegeben?

Eventuell ist der PORT beschädigt. ESD usw.

von harry (Gast)


Lesenswert?

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

von Michael (ein anderer) (Gast)


Lesenswert?

@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!!!

von Michael Lippert (Gast)


Lesenswert?

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

von Michael (ein anderer) (Gast)


Lesenswert?

@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!

von ewigerstudent74 (Gast)


Lesenswert?

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

von Thorsten (Gast)


Lesenswert?

"Michael (ein anderer)" hat schon recht, da ist was oberfaul. Aber es
scheint ja jetzt zu gehen :)

von Benedikt (Gast)


Lesenswert?

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.

von Michael (ein anderer) (Gast)


Lesenswert?

Wozu denn die Ursache suchen, verstehen und beseitigen, wenn man auch an
den Symptomen rumpfuschen kann...

von dave (Gast)


Lesenswert?

Da haste recht...

dave

von ewigerstudent74 (Gast)


Lesenswert?

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

von Profi (Gast)


Lesenswert?

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

von mmerten (Gast)


Lesenswert?

PortC ist ja auch der ADC-Teil
Alle Versorgungsanschlüsse Vcc AVcc und GND richtig beschaltet ?

von Sf2 (Gast)


Lesenswert?

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.

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
Noch kein Account? Hier anmelden.