Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
FAQ zum Einsteigerkurs uC-Programmierung
Hallo Sven,
ich denke 10mA pro Segment reichen, das macht 80mA, im Datenblatt steht ein Maximalwert von 200mA. Ich habe mir sogar die Transistoren aus der Lektion gespart, die Anzeige hängt somit direkt zwischen den io-Pins. Falls das im Multiplexbetrieb zu dunkel ist, selbst mit 20mA ist der Maximalwert ncht überschritten

Alfred
Zitieren
(20.01.2020, 19:51)Larry67 schrieb: Hallo Ihr,

Anmerkung:

 wenn Ihr in der Zusatzaufgabe eine Mehrfach 7 Segmentanzeige benutzt oder mehrere einzelne im Multiplex  bitte die Massen oder das Plus mittels Transistor schalten sonst verkraftet der Arduino den Stom nicht !

Sven

Siehe auch PDF der 3. Lektion!
Wieviel Strom der Arduino liefern kann, das hatten wir ja schon vorher besprochen!
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
Bei 4 Segmenten kann der Strombedarf schon mal etwas zu hoch werden, gerade in der Testphase falls mal alle voll angesteuert werden. Wenn alle korrekt nacheinander
angesteuert ergibt sich ein Mittelwert je nach Frequenz pro Durchlauf. Das könnte vermutlich noch reichen. Mit Transistor ist man aber immer auf der sicheren Seite.
sicheres Auftreten bei völliger Ahnungslosigkeit
Zitieren
Ein gängiges Transistorarray wie ULN2803 wird in dem Bereich (Anzeigen, kleine Schrittmotoren) auch oftmals als Treiber eingesetzt.  Die meisten heutigen 7-Segmentanzeigen sollte der Prozessor aber idR antreiben können ohne das es da zu eng wird und der ATmega Schaden nimmt. Vielleicht gibt es Ausreißer, frühe Anzeigenmodule oder vielleicht die VQE- Serie aus der DDR-Zeit? Ein Blick ins Datenblatt sollte aber letzte Sicherheit geben und der Lösung der Zusatzaufgabe nicht im Wege stehen.

Wichtig ist halt beim Testen nicht alle 4-Anzeigen gleichzeitig durch-gesteuert zu haben!

Wie sieht es denn aus? Kommen alle mit und werden die 4 Wochen ausreichen?
Ich habe ja schon einige Lösungen (auch der Zusatzaufgaben) zugeschickt bekommen. Tut mir Leid wenn ich da noch nicht allen mit einer Korrektur geantwortet habe, aber im Moment ist meine Kursunterstützung (Otto) leider in den ungewollten Krankenstand eingetreten und hospitalisiert.
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
Hallo Bernhard,
ich denke es sollte für mich reichen die Zeit obwohl ich auch etwas kränkle.
Momentan überlege ich die Prozedur, wie man aus mehrstelligen Zahlen einzelne Ziffern separieren kann.
Lange habe ich mit den millis() gekämpft aber ich denke ich hab sie gezähmt.
Sven
Zitieren
(20.01.2020, 23:25)Larry67 schrieb: Momentan überlege ich die Prozedur, wie man aus mehrstelligen Zahlen einzelne Ziffern separieren kann.

Thumbs_up  

Ein Tipp: Division und/oder Modulo
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
Hallo zusammen, 

eine kleiner Hinweis zur Realisierung der Hausaufgaben, eine Fallstrick-Warnung also! Ich habe gerade eine mögliche Lösung für die Zusatzaufgabe von einem Teilnehmer bekommen. Dabei gab bzw. gibt es Probleme bei der Erkennung der Tastendrücke (weniger des Entprellens). Der Auslöser dafür ist, das der Beispielcode aus dem Lektions-PDF nahezu 1:1 übernommen wurde ohne sich vorher Gedanken zu machen wie der Controller "ausgelastet" ist.

War im PDF doch einzig die Erkennung des Tastendrucks die Aufgabe des Controllers, so ist es bei den Zusatzaufgaben die Ausgabe der Zahlen auf dem Anzeigenmodul. Die Erkennung der fallende Flanke wie es im Demoprogramm im PDF gezeigt wird, 

Zitat:  if (digitalRead(TASTER_PIN) == HIGH)

     if (digitalRead(TASTER_PIN) == LOW) {


kann nun nicht mehr so genutzt werden! Warum nicht? Ganz einfach, während der Taster niedergedrückt wird, ist der Controller mit hoher Wahrscheinlichkeit gerade gar nicht an der Stelle im Programm, wo der Flankenwechsel erkannt werden soll! Kommt er dort an, ist die Flanke schon auf LOW und wechselt nicht erst von HIGH auf LOW. Der Controller bekommt das also gar nicht mit.

Bei dem Demoprogramm im PDF aber hat der Controller gar nichts anderes zu tun als auf den Flankenwechsel zu warten. Auch beim Ampelprogramm könnte man das je nach Implementierung so umsetzten, denn da muss der Controller ja nur jede Sekunde für ganz wenige Takte den Taster aus den Augen lassen, nämlich wenn die Ampel von einem Zustand in den anderen wechselt.

Bei dem Programm was ich gerade als Lösung erhalten habe verpennt der Controller aber ziemlich oft den Flankenwechsel weil er mit Multiplexing und Anzeige am Leben erhalten beschäftig ist und erkennt somit den Tastendruck nicht! Hier muss die Tastenabfrage anders implementiert (oder öfters aufgerufen) werden, am Entprellen mit millis() ändert sich dagegen aber nichts. 
Also bitte nicht einfach Democode unüberlegt irgendwo in eine Implementierung übernehmen! Erst schauen ob der Controller einen bestimmten Codeteil wirklich oft genug anspringen kann wenn es um das Pollen von äußeren Signalen/Tasten angeht!

Gar nicht so einfach auf einem Prozessor mehrere Sachen "gleichzeitig" zu machen, oder ? Big Grin  Bei Mehrkernern kein Problem, aber wenn man nur ein Rechnenwerk hat, muss man als Entwickler tricksen.




Gruß Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
Hallo Ihr,
bei Zusatz 2 : 4 Siebensegmetanzeigen = 11 Anschlüsse + 2 Schalter = 13 Anschlüsse
Welchen von D0 oder D1 kann man da nehmen?
In der Testphase brauch ich ja die Schnittstelle auf D0/D1
Oder wieder denkfehler??
Sven
Zitieren
Hallo Sven,

7-Segmente = 7 Pins
Punkt           = 1 Pin
gemeinsame Anode/Kathode = 1 Pin

Bei 4 Anzeigen:

8 Pins für alle Segmente (inklusive Punkt), denn wir Multiplexen.
4x Anode/Kathode zum Schalten
= 12 Ausgänge
____________________________________________________

2 Taster = 2 Eingangspins.

Insgesamt also 14 I/Os wenn ich mich nicht verrechnet habe. Die Schnittstelle D0 und D1 würde ich zu Debug-Zwecken freilassen und als serielle Schnittstelle betreiben.
Von den Analogpins A0-A7 kannst du A0-A5 als ganz normale digitale I/Os benutzen!

Sollte also für alles reichen. Spontan würde ich die acht Datenausgänge zum Display also auf die D's legen, auf die A's das Schaltsignal welches Anzeigemodul gerade dran ist + die Taster. Ich kann Dir jetzt aber nicht genau sagen welche Belegung ich in der Musterlösung gewählt habe, werden wir dann ja sehen.

Man könnte sogar an einen(!) Analogkanal mehrere Taster hängen, aber soweit sind wir noch nicht!  Tongue Analoges I/O kommt erst noch.

Gruß
Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
Hallo Bernhard,

danke für den Hinweis mit den Analogpins, hatte zwar nachgeschaut war mir aber sehr unsicher damit deshalb die Frage.
Nein dann sollte es reichen.
Den Punkt????  Kopfkratz....  brauchen wir den denn??

Sven
Zitieren
(21.01.2020, 22:03)Larry67 schrieb: Den Punkt????  Kopfkratz....  brauchen wir den denn??

Habe gerade nochmal in der Aufgabe nachgeschaut, für die Uhr als Trenner zwischen Stunden:Minute vielleicht und zur Darstellung des Sekundentakts.
Ansonsten könnte man später bei einer Multimeteranwendung (Spannung/Strom,Kapazität, Tausendertrenner bei Widerstandswerten,..) vielleicht auch eine Kommazahl darstellen.
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
Ja bei der Uhr  aha die kommt noch und ein Multimeter auch  Exclamation

aber im Moment nicht
Zitieren
Hallo ihr,
ein Problem:

z = 1 bis 4

Zahl(z) soll Zahl1 bis Zahl4 werden, klappt aber nicht.

Denkfehler??


Sven
Zitieren
(24.01.2020, 20:36)Larry67 schrieb: Denkfehler??

Möglicherweise!

(24.01.2020, 20:36)Larry67 schrieb: Hallo ihr,
ein Problem:

z = 1 bis 4

Zahl(z) soll Zahl1 bis Zahl4 werden, klappt aber nicht.

Was soll Zahl(z) sein? Eine Funktion mit Übergabeparameter und (vier?) Rückgabewerten? Wenn ja, musst Du die Rückgabewerte in
eine(!) Datenstruktur packen und nur dieser eine(!) Datenstruktur als neuen Datentypen zurückgeben.

Ansonsten ist deine Frage nicht vollständig ausformuliert um eine genaue Antwort zu geben.

Gruß Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
gut mal verständlicher:

ein Zähler zählt  z = von 1 bis 4 für die 4 Siebensegmentanzeigen

mir stehen 4 Zahlen zur Verfügung z.B.:  0  2  7  1,    also Zahl1 = 0 , Zahl2 =2, .......

nun soll der Zähler bei der ersten Anzeigestelle  z=1  Zahl1  darstellen ( Segmente werden aus einem array ausgelesen)

bei der zweiten Anzeigestelle                            z=2 Zahl2 darstellen  u.s.w.

Allerdings funktioniert nicht        :                            Zahl(z)

hoffe es ist verständlicher nun

Sven
Zitieren
Verstehe, die Zahlenzerlegung in Einer, Zehner, Hunderter, Tausender funktioniert also.
Schaltest Du die gemeinsamen Kathoden/Anoden zur passend am Datenbus anliegenden Zahl um oder was für
ein Symptom macht denn die Anzeige?

Flackert die Anzeige zu sehr? Dann ist dein Multiplexing zu langsam.
Steht nur Müll oder 2-3x die gleiche Zahl in allen 4-Displays? Dann schalte mal langsamer zwischen den einzelnen Modulen um.

Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
so, also die Anzeige macht schon was sie soll, die Segmente werden umgeschaltet, Zahlen korrekt dargestellt, mittels delay wird das Durchlaufen der Zahlen erst noch gebremst, damit ich das richtig sehen kann. Habe also im Moment durchlaufende Zahl auf den 4 Stellen wie ein Laufband.

digitalWrite(k, Decod[k-2][Zahl2]);      stellt z.B.  die Zahl 2  nacheinander auf der ersten, zweiten, dritten, vierten  Stelle dar.

ich hätte gern                 [Zahl (z) ]     wobei z eine beliebige Zahl sein kann.

Fehlermeldung ist so:

sketch_dec19d:44:32: error: 'Zahl' was not declared in this scope

     digitalWrite(k, Decod[k-2][Zahl(z)]);

                                ^~~~



Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.
Zitieren
Beim softwaremässigen Multiplexing hätte ich jetzt während der Softwareentwicklung folgenden Vorschlag, um ein eventuelles Einbrennen der Anzeigen zu vermeiden, also Strombegrenzung wie als währe es eine Simultanansteuerung;
Bei gemeinsamer Anode mit entsprechender Z-Diode, bei gemeinsamer Kathode mit mehreren Si-Dioden in den gemeinsamen Versorgungszweig. Während des Testens ist die Anzeige natürlich dunkler. Man kannst auch mit Widerständen probieren, dann schwankt die Helligkeit natürlich je nach Ansteuerung. Aber egal, man muss sich erstmal keinen Kopf machen, dass während des Testens irgendwelche Hardwareschäden auftreten könnten. Wenn alles flutscht wirds wieder rückgängig gemacht. Bei den üblichen Siebensegmentanzeigen kann ich laut meiner Praxis einen durchschnittlichen Segmentstrom von 10mA bestätigen. VG Micha
Viele Grüsse, Micha

Ich wohne am deutschen Elbkilometer 358 westelbisch ... und genieße die Natur ... die Röhrentechnik zeigt, dass sich der Strom nur von Minus nach Plus bewegt ... und damit die echte technische Stromrichtung erkennbar macht ... dem Praktiker sind jedoch die irren Halbleiterstrompfeile egal








Zitieren
(24.01.2020, 21:37)Larry67 schrieb: so, also die Anzeige macht schon was sie soll, die Segmente werden umgeschaltet, Zahlen korrekt dargestellt, mittels delay wird das Durchlaufen der Zahlen erst noch gebremst, damit ich das richtig sehen kann.

Gut!

(24.01.2020, 21:37)Larry67 schrieb: Habe also im Moment durchlaufende Zahl auf den 4 Stellen wie ein Laufband.
digitalWrite(k, Decod[k-2][Zahl2]);      stellt z.B.  die Zahl 2  nacheinander auf der ersten, zweiten, dritten, vierten  Stelle dar.

Also doch nicht gut? Wenn da ein Laufband-Effekt eintritt, hast Du sicher irgendwo ein Problem mit der Indizierung in deiner Ansteuerung, also in der Auswahl des Ziffernmoduls. Wo kann ich Dir nicht sagen, das lässt meine Glaskugel mit den Infos nicht zu.

(24.01.2020, 21:37)Larry67 schrieb: ich hätte gern                 [Zahl (z) ]     wobei z eine beliebige Zahl sein kann.

Du benutzt offensichtlich ein 2-D Array Decod[k-2][Zahl2]. In den eckigen Klammern muss also ein gültiger Index stehen, der sich nur innerhalb der Feldgrenzen bewegen darf. Drüber/drunter ist verboten, dann kracht es, siehe Post #117 und #118 in diesem Thread.

Du möchtest aber  [Zahl (z) ]   haben. Dem Syntax nach kann Zahl(z) nur eine Funktion sein, die als Übergabeparameter irgendeine Zahl hat und die einen gültigen(!) Index in den Feldgrenzen vom Array Decod liefern muss.


(24.01.2020, 21:37)Larry67 schrieb: Fehlermeldung ist so:

sketch_dec19d:44:32: error: 'Zahl' was not declared in this scope

     digitalWrite(k, Decod[k-2][Zahl(z)]);

                                ^~~~

Die Fehlermeldung besagt aber, das nirgends so eine Funktion Zahl in deinem Quellcode existiert!  Damit steigt dann der Compiler logischerweise aus.
Ausweg also: Eine Funktion Zahl schreiben! Was darin zu stehen hat, nun dass kann ich von hier aus nicht sehen, das kommt auf deine bisherige Implementierung zur Lösung des Problems an.

Gruß Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
ich habe: zum testen
int Zahl1 =0;
int Zahl2 =2;
int Zahl3 =7;
int Zahl4 =3;

bei z.B.
digitalWrite(k, Decod[k-2][Zahl1]); läuft die Null durch


ich will Zahl1 dann Zahl2 dann Zahl3 und Zahl4 nacheinander da oben reinhaben

ich dachte dass es durch [ Zahl(z)] funktioniert, wobei z 1, dann 2, dann 3, dann 4 wird,
sodass es als Zahl1 Zahl2 u.s.w. interpretiert wird.

alles klappt ja bloß dann kommt die Fehlermeldung
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Einsteigerkurs Microcontrollerprogrammierung Bernhard45 13 9.934 23.05.2020, 23:55
Letzter Beitrag: Bernhard45

Gehe zu: