mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik segmentanzeige, transistor notwendig?


Autor: torben (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Ben (Gast)
Datum:

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

Autor: torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die antwort.

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

danke!!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht alles im zugehörigen Datenblatt.

Autor: torben (Gast)
Datum:

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

Autor: Ben (Gast)
Datum:

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

Autor: torben (Gast)
Datum:

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

Autor: Ben (Gast)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

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.