Bit banging open drain

OP #3317069
Liebe Leute,

ich betreibe mit einem Atmega Bit Banging auf vier Open Drain Ausgängen 
und beobachte eine seltsame Kapazität.

Hintergrund: Ich möchte ein 5110 LCD mit einem 5V-Arduino betreiben. Das 
Datenblatt des 5110 LCD (oder vielmehr des PCD8544-Controllers, 
http://www.sparkfun.com/datasheets/LCD/Monochrome/Nokia5110.pdf) sieht 
eine maximale Versorgungs- und IO-Spannung von 3.3V vor. Der Arduino hat 
einen 3.3V-Ausgang. Für die IO-Pins (CLK, DIN, D/C, RST) möchte ich 
einen Level-Shifter vermeiden. Meine Idee war also, die IO-Pins über 
einen Pullup zu den 3.3V zu ziehen, und auf dem Atmega über DDR zwischen 
Input-Hochohmig und Output-Low hin-und-herzuschalten.

Das funktioniert mit dem LCD-Display aber nur bei einem Pullup von 
4.7kΩ. Schon ein 10kΩ-Pullup verschmiert die 250kHz-CLK-Signale bis zur 
Unkenntlichkeit.

Was ich beobachte ist folgendes: Schalte ich auf Output-Low, so fällt 
die Spannung sehr schnell auf 0V ab. Schalte ich aber auf 
Input-Hochohmig um, so braucht die Spannung bei 4.7kΩ ganze 2μs um auf 
die 3.3V anzusteigen! Dasselbe passiert wenn das LCD gar nicht 
angeschlossen ist, und auch bei Pullup zu 5V!

Wie kommt das? Wo ist diese Kapazität von so etwa 100pf versteckt?

LG, Sebastian
Gast
Sebastian W. schrieb:

> Wie kommt das? Wo ist diese Kapazität von so etwa 100pf versteckt?

100p ist nicht wirklich viel, die kommen schnell mal allein durch 
Leiterzüge zustande. Und die Eingangskapazität der angeschlossenen 
Schaltung gibt's ja auch noch.
Gast
Gaanz dumme Querfrage - Wie lange braucht denn der Pin allein, um von 
Aktiv auf Passiv zu schalten? Das hat ja nichts mit einer von außen 
messbaren Kapazität zu tun.
OP
Anja schrieb:
> 1:1 Tastkopf verwendet?

Ja. Kann das bei 250kHz schon so viel ausmachen?

besupreme schrieb:
> Gaanz dumme Querfrage - Wie lange braucht denn der Pin allein, um
> von Aktiv auf Passiv zu schalten? Das hat ja nichts mit einer von außen
> messbaren Kapazität zu tun.

Es scheint, als würde der Pin nicht sofort hochohmig, sondern würde erst 
noch ein wenig Strom aufnehmen um eine innere Kapazität zu laden.

Ich habe mal einen minimalen Aufbau versucht und Pin PB1 eines 
Atmega328P bei 8MHz mit 2μs Output-Low 2μs Input-Hochohmig gepulst und 
mit 10kΩ zu VCC 5V gezogen:
1
#include <avr/io.h>
2

3
int main(void) {  
4
    while(1) {
5
        DDRB |= 1<<DDB1; 
6
        __asm__("NOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP");
7
        __asm__("NOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP");
8
        DDRB &= ~(1<<DDB1);
9
        __asm__("NOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP");
10
        __asm__("NOP\n\tNOP\n\tNOP\n\tNOP\n\tNOP");
11
    }
12
}

Das Oszilloskop ist das DS1052E, laut Datenblatt "Input Impedance 
1MΩ±2%, the input capacity is 18pF±3pF". Der Tastkopf steht jetzt auf 
10:1 und ist neu kompensiert.

Im Anhang ein Bild des Versuchsaufbau und die Wellenform. Kein schönes 
Rechteck, wirklich nicht. Nach meiner Schätzung werden 2.5V nach 1.9μs 
erreicht, die Zeitkonstante ist also 2.75μs und bei 10kΩ damit die 
Kapazität sogar 275pF!

Was geht hier vor ???

LG, Sebastian
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.