5Mhz Pegelwandler / AVR / 7 Segmentanzeige

  • Hallo,


    nach langer Abstinenz bin ich mal wieder online. Ich versuche gerade eine (später mehrere, Multiplexen ist allerdings kein Problem) 7 Segmentanzeigen anzuschließen. Da ich mit dem Platz sehr begrenzt bin und die Interrupt Pins auf dem Atmega 8 brauche, liegen die Anschlüße auf Port C und D verstreut. Ein zusätzliches Bauteil ala Schieberegister möchte ich mir sparen und auch der Atmega 8 soll bleiben.


    Als Beispiel:

    • Ziffer 1:PC4|PC5
    • Ziffer 2:PC2|PC3|PC4|PD4|PD5

    Leider fällt mir als Ansatz nur ein Mehrdimensionales Array ein, wo ich gesondert die Portadressen Abspeicher. Geht es möglicherweise anders und effizienter? Programmiert wird in C.

  • Normalerweise, wenn du einen Port hast nimmt man ja ein Array - in deinem Fall würde ich zwei Arrays nehmen, eines das die Codes für PORTC und eines das die Codes für PORTD enthält, danach kannst du einfach beide Arrays aufrufen und mit ODER in die Porteingänge reinschreiben - dazu eine Variable die den gegenwärtigen Wert (Bspw: 3) enthält und du kannst beim nächsten Ändern des Wertes den alten Code mithilfe seines invertierten Wertes (zu bekommen über die alte Variable) und UND rausbekommen und den neuen wieder mit ODER reinschreiben.


    Ist zwar ein kleiner Umweg, ab in C auch kein großer Programmieraufwand.

  • 2 getrennte Arrays funktionieren wunderbar, irgendwie dachte ich es gibt dort eine Möglichkeit über Bitmaskierung und Define :S Wie dem auch sei, es funktioniert wunderbar. Multiplex funktioniert ebenso.


    Da die Aussgabe klappt, geht es jetzt zum Thema Signalauswertung:
    Der Mikrocontroller soll die Zeit zwischen zwei ansteigenen Flanken messen und auf die 7 Segmentanzeigen ausgeben. Messen klappt bei "idealen" 50:50 PWM von einem anderen AVR mit verschiedenen Frequenzen zufriedenstellend.


    Problem ist nur, dass ich das Signal von einem Steuergerät abgreife:
    Eigenschaften.
    9-12V
    16Hz - 5 MHZ (Duty 50/50)
    steile Flanken


    Im nachfolgenden habe ich einfach einen 10k Widerstand + Z-Diode Parallel zum µC Eingang geschaltet. Ich habe eine Kapazität des Eingangs von 10pF angenommen.


    [Blockierte Grafik: http://cdj-online.de/Daniel/Et/270.PNG]


    Wie wirkt sich nun die Schaltung auf meine gemessene Zeit aus? Ich denke, dass die gemessene Zeit auch mit dieser einfachen ZenerDioden (ZF 4,7 Reichelt) Schaltung genau gemessen werden kann, da die steigenen Flanken ja recht sauber aussehen sollten. Sollte ich besser einen aktiven Pegelwandler nutzen, wenn ja welchen?


    Der Pegelwandler, egal ob aktiv oder passiv, sollte einen geringer Strom, um die Signalquelle so wenig wie möglich zu belasten, und eine hohe Genauigkeit besitzen.

  • Die Z Diode hat sicher mehr als 10 pF...


    Bei 5 MHz und der Voraussetzung die Quelle wenig zu belasten ist eine Pegelwandler zu empfehlen... ein schneller OPV könnte hier helfen...


    Alternativ könntest du darüber nachdenken einen Widerstand vor den Eingangsport zu bringen... Die intere Schutzdilde sollte dann den Rest machen... aber es sollten nicht mehr als 1 mA darüber abfließen... weniger ist besser... auch für deine Anwendung...


    Grüße Basti


  • Habe mich unglücklich ausgedrückt. Die Eingangskapazität des µCs wurde mit 10pF nachgebildet. Die Zehnerdiode hat natürlich mehr.


    Ach richtig, die Innere Schutzdiode habe ich vergessen :) Nach Möglichkeit versuche ich es erstmal ohne OPV, die Diode dürfte ja keinerlei Wirkung mehr haben, da sie erst ab 5V+Spannungsabfall der Diode wirken kann.