mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kein Rechteck am Ausgang


Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch hallo,
wie hoch ist deine Frequenz am Portpin?
Gruß
AxelR.

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (ein anderer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

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

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AxelR. (Gast)
Datum:

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

Autor: dave (Gast)
Datum:

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

dave

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry,

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

Gruß
Ralf

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (ein anderer) (Gast)
Datum:

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

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AxelR. (Gast)
Datum:

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

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AxelR. (Gast)
Datum:

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

Autor: Mr_Boertsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du schonmal dein Signal auf einem andere Pin Ausgegeben?

Eventuell ist der PORT beschädigt. ESD usw.

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (ein anderer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Michael Lippert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (ein anderer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (ein anderer) (Gast)
Datum:

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

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da haste recht...

dave

Autor: ewigerstudent74 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)).

Autor: mmerten (Gast)
Datum:

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

Autor: Sf2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.