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
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
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.
Wenn das Oszi es nicht packt, dann würde er was sinusähnliches sehen und keine Entladekurve. Vielleicht ist der Tastkopf nicht abgeglichen?
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
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
Dann nimm doch mal einen Funktionsgenerator und sieh dir das da mal an. Ich denke auch, das es am oszi liegt.
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
Poste doch mal Deinen Quellcode per Copy&Paste. Sollte ja kurz sein. Ich tippe immer noch auf Programm-Fehler...
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
Nimm halt mal einen andren Rechteckgenerator (555), damit Du das Oszi ausschliessen kannst!!
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
Dann mach mal ein oder zwei NOP's zwischen Setzen und löschen des Portpins und probier dann mal, obs besser wurde.
Hast du schonmal dein Signal auf einem andere Pin Ausgegeben? Eventuell ist der PORT beschädigt. ESD usw.
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
"Michael (ein anderer)" hat schon recht, da ist was oberfaul. Aber es scheint ja jetzt zu gehen :)
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.
Wozu denn die Ursache suchen, verstehen und beseitigen, wenn man auch an den Symptomen rumpfuschen kann...
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)).
PortC ist ja auch der ADC-Teil Alle Versorgungsanschlüsse Vcc AVcc und GND richtig beschaltet ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.