Forum: Mikrocontroller und Digitale Elektronik segmentanzeige, transistor notwendig?


von torben (Gast)


Lesenswert?

hi,
eine frage, im tutorial werden 4 segmentanzeige mit multiplexverfahren 
betrieben. die einzelnen anzeigen werden dann mit transistoren 
durchgeschalten. ich hab im moment keine transistoren da (kenn mich mit 
transistoren leider überhaupt net aus, gibts da irgendwo eine gute 
zusammenfassung?). nun meine frage, kann ich die 4 anoden von den 4 
anzeigen nicht direkt an den avr anschliesen und so ein und 
ausschalten??


wie kann ich mit einem transistor richtig große ströme steuern?? sagen 
wir mal in der richtung von 5A und 12V??


danke im voraus
torben

von Falk B. (falk)


Lesenswert?

@  torben (Gast)

>transistoren leider überhaupt net aus, gibts da irgendwo eine gute
>zusammenfassung?).

Standardbauelemente

> nun meine frage, kann ich die 4 anoden von den 4
>anzeigen nicht direkt an den avr anschliesen und so ein und
>ausschalten??

Ja, wenn du Low-Current Anzeigen nimmst bzw. mit recht geringer 
Helligeit leben kannst. Siehe LED-Matrix.

>wie kann ich mit einem transistor richtig große ströme steuern?? sagen
>wir mal in der richtung von 5A und 12V??

Siehe Transistor

MFG
Falk

von Ben (Gast)


Lesenswert?

maximaler strom des gemeinsamen portpins darf 20mA (typisch) nicht 
überschreiten. sprich du hast bei 7-segment-anzeigen 3mA pro segment zur 
verfügung (worst case "88888").

zum schalten großer ströme wenn du 12V zur verfügung hast ganz klar 
mosfet-transistor. gate-ansteuerung ist einfach mit zwei kleinen 
transistoren zu machen und der mosfet erzeugt kaum verlustwärme.

von torben (Gast)


Lesenswert?

danke für die antwort.

wo sehe ich den bei den transistoren ab welcher spannung bzw strom die 
durchschalten??

danke!!

von Gast (Gast)


Lesenswert?

Steht alles im zugehörigen Datenblatt.

von torben (Gast)


Lesenswert?

aber wie heisen die spannungen bzw ströme?? da steht nämlich alles nur 
in tabellen und auf english!

von Ben (Gast)


Lesenswert?

bei normalen mosfets mindestens 10v gatespannung für hohe ströme. 
maximal 20v (abhängig vom fet), du kannst die 12v also ganz einfach 
dafür nehmen. bei logic-level-fets reichen 5v, du kannst solche also 
direkt mit einem portpin ansteuern.

ich nehm für sowas immer recht starke mosfets mit gate-treiber (besagter 
schaltung mit 2 kleinen extra-transistoren um den dicken brummer zu 
steuern). das funktioniert auch bei etlichen khz schaltfrequenz noch 
sehr gut. typen nehm ich meistens IRF3205, IRFP2907 oder IRFP064. 
IRFZ34/IRFZ44 ist auch gut für sowas, ist bei mir aber aus der mode 
gekommen. die gate-treiber sind meistens zwei BC547.

wenn du keine mosfets willst schau dir darlington-transistoren an. die 
können mit einem kleinen basisstrom von 20mA große ströme schalten. mach 
ich aber nicht, ich favorisiere mosfets. daher weiß ich hier keine 
geeigneten typen, müßte ich erst suchen.

von torben (Gast)


Lesenswert?

hi vielen dank. werd bei meiner nächsten reichelt bestellung auf jeden 
fall mal ein par transistoren mitbestellen.
hab die anzeigen aber für den moment direkt angeschlossen. hätte eine 
Frage zum c code und zwar was sehr komisches, ist mir noch nie passiert:

Folgender code

#include <avr/io.h>
#include <avr/oldmacros.h>

unsigned char Segmentausgabe(unsigned char zeichen);


int main(void){

unsigned char array1[]={"HALL"};
int i=0;

  outp(0xff, DDRD);
  outp(0xff, DDRB);



  //while(1){
  //erste anzeige
  outp(0x20, PORTB);
  outp(Segmentausgabe(array1[i]), PORTD);
  outp(0x00, PORTB);

  //zweite anzeige
  outp(0x10, PORTB);
  outp(Segmentausgabe(array1[i+1]), PORTD);
  outp(0x00, PORTB);


  //dritte anzeige
  outp(0x08, PORTB);
   outp(Segmentausgabe(array1[i+2]), PORTD);
  outp(0x00, PORTB);

  //vierte anzeige
  outp(0x04, PORTB);
  outp(Segmentausgabe(array1[i+3]), PORTD);
  outp(0x00, PORTB);
//}



  return 0;
}


die funktion segmentausgabe gibt im prinzip nur den code für die 
jeweiligen buchstaben aus. nun aber folgendes.

wenn ich die kommentarzeichen vor der while schleife wegmache, dann 
läuft der compiler beim debuggen immer nur die mittlere codezeile von 
jedem der 4 blöcke ab. das "outp(0x20, PORTB);" aus dem ersten block 
überliest er total. wenn die while schleife aber weg ist, dann 
durchläuft er alles so we er soll.
woran kann das liegen>???

vielen dank im voraus.

von Ben (Gast)


Lesenswert?

da fragst du am besten den hersteller des programms... vielleicht 
erwartet das auch eigentlich abgeschlossene kommentare?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Tut mir leid, mit dem Codefetzen kann ich wenig bis nix simulieren.

Es fehlt die Angabe welcher AVR, welche AVR-GCC Version und welche 
Optimierungsstufe benutzt wird.

Es fehlt in modernen WinAVR Versionen die Datei oldmacros.h. OK, das 
kann man durch ein Makro (s.u.) ersetzen, aber es ist unklar, ob dadurch 
das gleiche Simulationsergebnis erzielt wird wie bei dir,
#define outp    ( val, port )       (port) = (val)

Die Definition der Funktion Segmentausgabe(unsigned char zeichen) fehlt 
auch.

Deshalb nur der allgemeine Tipp:

Schau dir im Debugger/Simulator an, wie das Disassemblerlisting 
aussieht. Sind die Anweisungen vollständig? Möglicherweise kann der 
Debugger/Simulator die Breakpoints nicht den C-Codezeilen zuordnen.

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.