Guten Tag
Ich Bin Neu
Versuche mein Bestes ((wurde schon vor gewarnt hier Herrschen Raue
Sitten,
bezüglich Anfragen korrekt Formulieren.
Sachverhalt: Das Display einer LKW Waage soll modifiziert werden.
Arduino Projekt 3 Ziffern 100-999 Anzeigen auf einem
Landwirtschaftlichen Fahrzeug.
Ich habe Bereits Gemessen und einen Schaltplan versucht zu erstellen.
Daraus ergibt sich für mich ein Logik SCHEMA.
NUN habe ich Probleme beim Setzen der CP der 74HC138 und 74HC574
Und bitte Hier um Verständnis Hilfe
Frage : die 74HC138 Sind LOW Level wie schaltet dieser Baustein denn den
74HC574 der Zeilensteuerung
Erkenntnis : -Es liegen alle Datenbits D0-7 auf allen 74HC574 an 21Stk
-Die Adressen der 74HC138 Sind auch Kombiniert A0-A2
-Alle Positiven E3 Enable (aktiv H) der 74HC138 sind
Zusammen Herausgeführt
- Alle Enable2 Negiert 138er liegen auf GND
- die E1 Negiert der 3 verbauten 138er sind herausgeführt
DER Anschlussstecker Zeigt also die 8Datenbits der 74HC574
Die 3 Adressen der 74HC138
Je 74HC138 den E1 Negiert und den Gemeinsammen Enable der 138er
Für gewöhnlich zeichnet man Schaltpläne von links nach rechts so wie wir
lesen. Nicht arabisch ...
Eingänge der IC nach links und Ausgänge rechts. Da tun einem ja die
Augen weh.
Der 574 übernimmt mit steigender Flanke an CP die anliegenden daten von
Dn an Qn sofern OE auf Low liegt.
Der 138 ist ein 3zu8 Decoder. E1 und2 müssen Low und E3 High sein. E1
und E2 werden intern negiert.
@ Kurt S. (bmbbsr)
>Ich habe Bereits Gemessen und einen Schaltplan versucht zu erstellen.
Da stimmt einiges nicht. Soche Anzeigen steuern die Elemente in einer
Matrix an, um Leitungen und Treiber zu sparen. Die sehe ich in deiner
Schaltung nicht.
>Frage : die 74HC138 Sind LOW Level
Diese IC sind 1 aus 8 Dekoder, sprich, einer der Ausgänge ist LOW, alle
anderen HIGH. Normalerweise nimmt man sowas als Chip select Dekoder für
Peripheriebausteine. Hier wird ein Speichertakt für Register erzeugt.
> wie schaltet dieser Baustein denn den>74HC574 der Zeilensteuerung> DER Anschlussstecker Zeigt also die 8Datenbits der 74HC574>Die 3 Adressen der 74HC138>Je 74HC138 den E1 Negiert und den Gemeinsammen Enable der 138er
Über die drei Adressen A,B,C und die Enable Eingänge kann genau EIN
Ausgang ausgewählt werden, welche genau EIN Register mit einem Ladepuls
versorgt.
Naja, ich hätte den Kram lieber mit einer Handvoll Schieberegister
gebaut, weniger Leitungen und allemal schnell genug.
DANKE erst mal für den Input
Ich bin Werkzeugmacher
Nur Hobbyelektroniker
Für mich Persönlich bin ich SEHR weit gekommen denke ich
Aktuell versuch ich mal eine NANO an die Pins anzuschliessen und etwas
zu Flippen wäre schon toll.
Angehängt habe ich die Beschaltung von einer Ziffer 5x3
Ein Labornetzteil zeigt mir hoffentlich ob ein Kurzschluss Besteht (1A)
ansonsten sind beim Manuellen Flippen 200mA am Netzteil zu sehen
HILFE für das Anlegen der signale wäre Hilfreich
Zuerst den DOT anwäglen und dann die Ziffer Freigeben
ODER erst die Ziffer Anwählen und dann die einzelnen Dots setzen
DANKE
@ Kurt S. (bmbbsr)
>Nur Hobbyelektroniker>Für mich Persönlich bin ich SEHR weit gekommen denke ich
Das kann schon sein.
>Aktuell versuch ich mal eine NANO an die Pins anzuschliessen und etwas>zu Flippen wäre schon toll.
Kriegt man hin, denn die Schaltung ist ja schon fertig und funktionierte
mal.
>Angehängt habe ich die Beschaltung von einer Ziffer 5x3
Arg unscharf. Außerdem sieht man auf so einem Photo keine VErbindungen.
>Ein Labornetzteil zeigt mir hoffentlich ob ein Kurzschluss Besteht (1A)>ansonsten sind beim Manuellen Flippen 200mA am Netzteil zu sehen
Klingt OK.
>Zuerst den DOT anwäglen und dann die Ziffer Freigeben
Nein.
>ODER erst die Ziffer Anwählen und dann die einzelnen Dots setzen
Ja.
Wenn du das Ding mit einem Labornetzteil mit Strombegrenzung versorgst,
sollte auch im Fehlerfall nix kaputt gehen.
Im Prinzip es nicht so schwer. Sowohl Spalten als auch Zeilen können per
ULN2803 aktiv auf GND gelegt werden oder per UDN2982 auf VCC. Je ein ULN
+ UDN sind zusammengeschaltet, das ist ein Push-Pull Treiber für Arme.
Deine Ansteuerung muss nun sicher stellen, da0 niemals ULN + UDN an
einer Leitung gleichzeitig aktiv sind.
Du solltest den Schaltplan noch einmal sauber zeichnen, damit du für die
Ansteuerung einen guten, klaren Überblick bekommst, was an welchen
Register hängt.
Danke
Ich werde mir Heute mal eine MCP23017 besorgen und dann Damit die Nano
Porterweiterung auf die 16Bits Auf schalten
Schaltung Neuzeichnen braucht zeit für das im ersten Beitrag habe ich
10Tage und 1Blockbatrie verbraten .
NEUER SCHALTPLAN
Anbei ein Neuer Plan mit den 5x3 Dots Je Ziffer
ES Haben sich Neue Erkenntnisse ergeben So dass die Zeilensteuerung und
Spaltensteuerung durch die 74HC138 nun mit der CLK der beiden 47HV74
verbunden sind!
Dies hat sicherlich Auswirkungen
GESUCHT IST:
Schaltablauf zum Setzen von einzelne DOTS
und Rücksetzen des gleichen BZW Löschen des kompletten Displays.
Noch mal zum Verständnis es sollen nur 3 Ziffern angezeigt werden
Zahlen 100-999
Bitte um Verständnis Hilfe
Danke
Wenn Ich mir die Logicliste des 74HC138 Anschaue denke ich bekomme ich
irgendwie Probleme denn ich sollte ja Ausgang 7 zum schalten benutzen
Zusammen mit einer Ziffer
ODER mach ich da ein Denkfehler da die 74HC574 das Speichern
Also Zuerst die Ziffer anwählen.
1
void toggleEnable(){
2
delay(5);
3
mcp.digitalWrite(7, HIGH); // ON Enable alle 3 74HC138
4
delay(5);
5
mcp.digitalWrite(7, LOW); // OFF Disable alle 3 74HC138
6
}
7
8
void setZiffer(int ziffer){
9
if (ziffer & 1)mcp.digitalWrite(0, HIGH);else mcp.digitalWrite(0, LOW);
10
if (ziffer & 2)mcp.digitalWrite(1, HIGH);else mcp.digitalWrite(1, LOW);
11
if (ziffer & 4)mcp.digitalWrite(2, HIGH);else mcp.digitalWrite(2, LOW);
12
delay(5);
13
mcp.digitalWrite(3, LOW); // aktiviere !E1 vom 74HC138 der die ziffern Auswaehlt
14
toggleEnable();
15
mcp.digitalWrite(3, HIGH); // deaktiviere !E1 vom 74HC138 der die ziffern Auswaehlt
@Kurt S. (bmbbsr)
>ODER mach ich da ein Denkfehler da die 74HC574 das Speichern
Ja natürlich! Das ist ja der Witz an den Bausteinen!
Daten auf den Bus anlegen, Taktsignal für Register erzeugen, Daten
werden gespeichert und erscheinen am Registerausgang.
Dein 2. Schaltplan ist schon deutlich besser, gut so. Aber es sind noch
Fehler und Mängel drin.
GAnz falsch! Der Signalnale Spalte 1 erscheint vor deinem Register IC12
und in der Relaismatrix! Das ist Unsinn! Eagle erlaubt sowas gar nicht,
es sei denn man murkst.
Mach es richtig, du lernst dabei was Wichtiges. Der Name von Signalen
wird mit dem Befehl LABEL sichtbar gemacht, das ist ABC unten rechts in
der Menuleisten. Damit clickt man ein Signal an und platziert den
erscheinenden Namen auf dem Signal. Dann kann man den Namen mit NAME
ändern.
Gib den Signalen in der Matrix sinnvolle Namen, z.B. Spalte1 etc. Ebenso
dem Bus und den Steuersignalen der Register. Dann wird das auch was mit
der Kommunikation im Forum.
Du mußt die Ziffer zeilenweise schalten. Da aber je nach Polarität die
Relais/FlipDots ein anderes Zeilen Signal benötigen, mußt du jede Zeile
2. Schalten
Zeile1 auf HIGH
Alle Spalten auf LOW, die LOW sein sollen
Alle Spalten auf Tristste (kein Treiber an den Spalten aktiv)
Zeile1 auf LOW
Alle Spalten auf HIGH, die HIGH sein sollen
Das Ganze für alle Zeilen mit den passenden Pausen von ein paar Dutzend
Millisekunden.
Um das zu Erreichen, muss man die passenden Bitmuster auf den Datenbus
legen und über die passenden Speicherpulse im Register speichern. Dabei
muss man halt aufpassen, daß zwischendurch keine ungültigen Zustände
entstehen und ULN und UDN am gleiche Signal gleichzeitig aktiv werden.
Im einfachsten Fall schaltet man alle Treiber zwischendurch aus und
stetzt immer nur die aktiven Treiberausgänge neu.
Danke
Für die Überaus Freundlichen Hinweise
Die Datei hänge ich an.
Für mich wäre das Zusammenspiel der beiden unteren Register
mal interessant warum da die Zeilen und spalten getrennt wurden
Das ist ja wegen dem Rücksetzen DENKE ICH.
Mir ist der Stromfluss nicht ganz klar.
der UDN bringt die Plus der ULN die Minus
Da unten 2 74hc574 Verbaut sind denke ich das dies mit der Zeilen
Spaltensteuerung zu tun haben wird
KANN Jemand mal bitte den Stromfluss zum Rücksetzen verdeutlichen.
Ich habe Ja die Polung im Schaltplan markiert um Auf und Zu klappen der
Flipdots zu Realisieren.
Danke
Ich hoffe Das ich das mit meinem Verständniss von der Materie
Hinbekomme.
So, hier mal der veredelte Schaltplan ;-)
Und damit wird die Funktion auch sonnenklar!
Es gibt pro Ziffer 3 Register, welche zwei 8 Bit-Treiber ansteuern. IC12
wird über 2 getrennte Register angesteuert, um Zeilen und Spalten
getrennt zu kontrollieren. IC7 wird 1:1 von IC3 gesteuert. IC1 ist eine
Verriegelung der Register IC4 und IC5, damit wird ein Kurzschluß
verhindert, falls die Software falsche Steuerdaten in die Register
schreibt. Damit ist die Ansteuerung idiotensicher ;-)
IC2, IC8 und IC9 erzeugen die Speichertakte für die jeweiligen Register.
Der Speicherpuls wird generiert, indem man den jeweiligen Ausgang über
die Eingangsbits selektiert, der geht dann auf LOW. Beim Deselektieren
geht er wieder auf HIGH, mit dieser steigenden Flanke werden die Daten
in den Registern bzw. FlipFlops gespeichert.
Der Puls zum Kippen der FlipDots wird mit IC10 erzeugt. Da hat man wohl
auch nicht so recht der Software vertraut ;-) Um IC10 zur Pulserzeugung
zu animieren, muß man erstmal dessen Reset freigeben (low active!) Das
erreicht man durch Laden einer 0 in IC11A. Sprich, an D0 eine 0 anlegen
und den Speicherpuls CLK_TRIG_EN generieren. Das muss nur einmalig
erfolgen. Den eigentlichen Puls löst man aus, indem man in IC11B erst
eine 0 und dann eine 1 lädt, das geschieht über D1 und CLK_TRIG.
Tja, das war's eigentlich schon.
Muster für Zeile 1 HIGH und Spalten welche LOW sein sollen in IC3, IC4
und IC5 laden
steigende Flanke am Signal TRIGGER erzeugen
Muster für Zeile 1 LOW und Spalten welche HIGH sein sollen in IC3, IC4
und IC5 laden
steigende Flanke am Signal TRIGGER erzeugen
Das ganze für alle Zeilen wiederholen (Schleife)
Das alles für alle Ziffern wiederholen (Funktion)
Für die Anzeige deiner Ziffern brauchts du einen einfachen Zeichensatz
mit 3x5 Bit / Ziffer. Die speicherst man einfach in einem Array. Mach
dir nicht zuviel Mühe, die ungenutzen Bits in dem Array zu optimieren,
das lohnt sich nicht. Nimm einfach 5 Bytes / Ziffer und fertig.
1
voidsetze_ziffer(intziffer,intwert){
2
3
for(z=0;z<5;z++){
4
....
5
}
6
}
7
8
uint8_thex2dot[10][5]={{0x7,0x5,0x5,0x5,0x7},// 0
9
// weitere ergänzen
10
};
GGf. kann man auch mit 3 Bytes / Ziffer auskommen, wenn man spaltenweise
arbeitet. Das ist dann halt ggf. etwa mehr Dekodierarbeit bei der
Umwandlung in die Steuerdaten.
Prüfe, ob die Busanschlüsse alle passen, da hab ich teilweise nur
geraten.
Für eine gute, übersichtliche Software solltest du die verschieden
Arbeitsschritte in sinnvolle Funktionen packen z.B.
Danke Viel Input
Es klappt leider momentan Nicht
Da Spielt noch der der !Y7 der IC8 und oder 9 mit Denke ich
eine weitere Sicherung der IC 11A und 11B
Aber Schonmal weitergekommen
@Kurt S. (bmbbsr)
>Es klappt leider momentan Nicht>Da Spielt noch der der !Y7 der IC8 und oder 9 mit Denke ich>eine weitere Sicherung der IC 11A und 11B
Siehe oben!
Prüfe erstmal deinen Schaltplan und die Verdrahtung. Zuerst prüfst du
die CLK-Generatoren. Dort läßt du nacheinander die einzelnen Takte
wackeln und mißt, ob das am richtigen Pin wackelt. Danach die Register.
Dazu gibst du nacheinander die Werte 0x80, 0x40, 0x20, 0x10, 0x08, 0x04,
0x02, 0x01, einzeln in jedem Register IC3, IC4 und IC5 aus. Dann mißt du
jeweils, ob die Ausgänge den richtigen Wert haben. Das Gleiche mit IC11,
dort gibst du bei beiden Ausgängen abwechselnd 1 und 0 aus.
Wenn das alles geprüft ist, geht's weiter.
>const int CLK_TRIG_EN = 8; // LOW Activ>const int CLK_TRIG = 9; //Puls = Low dann High
Was soll man mit diesem Fragment anfangen?
Messung mach ich Montag
hier mal die Funktion
void setze_ziffer(int ziffer, int wert){
if (ziffer > 0x07) return;
if (ziffer & 1)mcp.digitalWrite(0, HIGH);else mcp.digitalWrite(0,
LOW);
if (ziffer & 2)mcp.digitalWrite(1, HIGH);else mcp.digitalWrite(1,
LOW);
if (ziffer & 4)mcp.digitalWrite(2, HIGH);else mcp.digitalWrite(2,
LOW);
for (int z=0; z<5; z++) {
if (z == 0 )mcp.digitalWrite(8, HIGH);else mcp.digitalWrite(8, LOW);
if (z == 1 )mcp.digitalWrite(9, HIGH);else mcp.digitalWrite(9, LOW);
if (z == 2 )mcp.digitalWrite(10, HIGH);else mcp.digitalWrite(10,
LOW);
if (z == 3 )mcp.digitalWrite(11, HIGH);else mcp.digitalWrite(11,
LOW);
if (z == 4 )mcp.digitalWrite(12, HIGH);else mcp.digitalWrite(12,
LOW);
uint8_t spaltewert = hex2dot[wert][z];
if (spaltenwert > 0x07) return;
if (spaltewert & 1)mcp.digitalWrite(15, HIGH);else
mcp.digitalWrite(15, LOW);
if (spaltewert & 2)mcp.digitalWrite(14, HIGH);else
mcp.digitalWrite(14, LOW);
if (spaltewert & 4)mcp.digitalWrite(13, HIGH);else
mcp.digitalWrite(13, LOW);
}
}
@Kurt S. (bmbbsr)
>hier mal die Funktion
Sowas sollte man als C-Quelltext formatieren, dann ist es auch besser
lesbar. Dafür braucht man die eckigen Klammern, siehe den Text unter
"Antwort schreiben".
Das Wird So nicht Funktionieren mit Zeile und spalte in einer Funktion !
Denn es ist Ja ion Positiv und Negative Seite gesplitet mit den IC 7 UDN
und IC12 ULN
Wenn der UDN 2982 Eine Spalte auf Positiv Schaltet und der ULN eine
Zeile auf Negativ Wird der DOT gesetzt. / Sichtbar
Schaltet der UDN die Zeile auf Positiv und der ULN die Spalte auf
Negativ
wird der Dot wieder Zugeklappt.
somit müssen unterschiedliche Bitmuster geladen werden für auf und zu
ca 30std Arbeit und noch kein Flip ;-)
DAS war mit der LED 130stk 7seg eigenbau schon lang mit dem max 7219
erledigt
und ein ganz kurzer Quellcode
@Kurt S. (bmbbsr)
>Das Wird So nicht Funktionieren mit Zeile und spalte in einer Funktion !
Mal langsam. Du bist da mal sicher nicht die Fachkraft, die das
beurteilen kann.
>Denn es ist Ja ion Positiv und Negative Seite gesplitet mit den IC 7 UDN>und IC12 ULN
Ja und?
>Wenn der UDN 2982 Eine Spalte auf Positiv Schaltet und der ULN eine>Zeile auf Negativ Wird der DOT gesetzt. / Sichtbar
Schon klar.
>Schaltet der UDN die Zeile auf Positiv und der ULN die Spalte auf>Negativ>wird der Dot wieder Zugeklappt.
Auch klar.
>somit müssen unterschiedliche Bitmuster geladen werden für auf und zu
Schrieb ich das nicht bereits?
Beitrag "Re: Flipdot Display Projekt (Hilfe Logik Erbeten)"
"Muster für Zeile 1 HIGH und Spalten welche LOW sein sollen in IC3, IC4
und IC5 laden
steigende Flanke am Signal TRIGGER erzeugen
Muster für Zeile 1 LOW und Spalten welche HIGH sein sollen in IC3, IC4
und IC5 laden
steigende Flanke am Signal TRIGGER erzeugen
Das ganze für alle Zeilen wiederholen (Schleife)
Das alles für alle Ziffern wiederholen (Funktion)"
>ca 30std Arbeit und noch kein Flip ;-)
Naja, nicht wirklich witzig. Aber wenn du so flatterhaft und
unstrukturiert arbeitest und denkt wie du hier schreibst, erklärt das
einiges. Wobei das für einen gelernten, deutschen Werkzeugmacher eher
untypisch ist.
>DAS war mit der LED 130stk 7seg eigenbau schon lang mit dem max 7219>erledigt
Das wäre hier auch schon passiert, wenn du strukturiert vorgegangen
wärst.
Ich wiederhole mich.
Prüfe den Schaltplan
Prüfe, ob deine Ansteuerung die einzelnen Ausgänge der ICs richtig
anspricht
Schreib die Funktion zu Ansteuerung der einzelne Ziffern.
Es gab ja nun mehr als genug Hinweise. Setze sie SYSTEMATISCH um.
>und ein ganz kurzer Quellcode
Wo?
Noch ein Tip. Du nutzt ja den MCP23017 als Portexpander. Vorsicht! Wenn
man da die Ausgänge mittels digitalWrite() einzeln setzt, kann das im
Einzelfall dazu führen, daß die Takterzeugung für die Register falsche
Takte für die falschen Register erzeugt! Das muss man vermeiden, indem
man den Steuerbus möglichst in einem Rutsch beschreibt. Dafür gibt es
die Methode writeGPIOAB(uint16_t), damit kann man auf einen Rutsch die
16 Bit schreiben und die erscheinen dann auch auf einen Rutsch an den
Ausgängen.
Außerdem ist die Funktion deutlich schneller, denn digitalWrite() liest
zuerst den aktuellen Stand aus dem IC, setzt das Bit und schreibt die
Daten zurück. Das spielt zwar für die langsame Mechanik keine Rolle,
aber vielleicht für andere Dinge.
@Kurt S. (bmbbsr)
>So auf Vielfachen Wunsch hier mal mein Murgs code.
Was hast du an dem Wort "Anhang" nicht verstanden?
>Ich habe nun angefangen die 16bit zu Füllen und als ganzes auszugeben
Ud wo ist das ersichtlich? In deinem Code sicher nicht. Mann O Mann, so
langsam kommen mit arge Zeifel, ob du WIRKLICH der/das bist, was du
vorgibst!
Ein paar Tips. Deine ganzen Definitionen ala
1
//int adr0 = 0;
2
//int adr1 = 1;
sind sinnlos. Man kann die als #define schreiben und nutzen, aber auch
das ist hier kaum sinnvoll.
Siehe Anhang, so könnte das aussehen und laufen. Teste mal. Im
Arduino-Terminal siehst du ein paar Texte, die sagen dir, was gerade
geprüft wird. Das mußt du in deine Hardware messen. Erst wenn die
Grundtest alle laufen kommt was Gescheites raus!
Danke
IM Schaltplan ist auch noch ein Fehler
IC4 die Zeilen liegen natürlich auf 4,5,6,7,8
mit dem Ersten Code ging IC 8 und 9 parallel
DANKE
Nochmal das PINOUT
// PINOUT MCP23017 to Display
//int adr0 = 0;
//int adr1 = 1;
//int adr2 = 2;
//int udnNumber = 3; IC2 Enable Positiv Power to be set
//int ulnrow = 4; IC9 Enable
//int ulncolum = 5; IC8 Enable
//int cycleLED = 6; TEST Kanal
//int enable = 7; Alle 74HC138 Enable
//int spalteA = 8;
//int spalteB = 9;
//int spalteC = 10;
//int zeileA = 11;
//int zeileB = 12;
//int zeileC = 13;
//int zeileD = 14;
//int zeileE = 15;
@ Kurt S. (bmbbsr)
>IM Schaltplan ist auch noch ein Fehler>IC4 die Zeilen liegen natürlich auf 4,5,6,7,8
Dann solltest du das korrigieren und einen aktuellen Schaltplan in Form
von PDF und SCH bereitstellen. Es fehlt auch noch GND an IC12/Pin9.
Außerdem geht IC12/Pin 10 sichern an V+, damit die internen
Freilaufdioden wirksam werden.
Frage Bist du auch im IRC
Ich denke für die bessere Lesbarkeit sollte man Binär Verwenden.
Da ich Ja Bit Kontroliere
Desweiteren ist der Enabe !E1 der einzelnen 138er LOW actiiv
@ Kurt S. (bmbbsr)
>Frage Bist du auch im IRC
Nein.
>Ich denke für die bessere Lesbarkeit sollte man Binär Verwenden.
Kann man machen. Aber das ist nebensächlich! Mach die Test und korrigier
den Schaltplan!
>Desweiteren ist der Enabe !E1 der einzelnen 138er LOW actiiv
Ja und? Das ist berücksichtigt. Wenn dein Plan stimmt.
>SMILE Ein Riesenschritt
Was denn? Was geht denn? Lies mal was über Netiquette.
Entschuldigung wenn ich etwas euphorisch wurde Metall-er und
Digitaltechnik speziell BIT Logik sind selten.
Zum Schaltplan
Ich habe nochmal alles Beschriftet und Durchgemessen
Es Haben sich Änderungen an den Steuer IC ergeben.
Geändert wurde auch IC4 zu IC12 Zeilensteuerung Negativ
DAS Wichtigste aber
#Erkenntnis das die LIB mcp23017 zuerst den Steuerbus setzt dann den
Datenbus.
Somit habe ich die LIB (cpp,h,keyword) bearbeitet. nun werden die
Datenbits und Steuerbits separat geschrieben.
Hier ergibt sich für mich wieder das BIT Problem
& 0xFF oder | 0xFF oder vileicht sogar direkt
##
TEST
Der Test
A void testCLK(uint8_t ziffer, uint8_t funktion) OK
Taktendes Signal an den Y der 138 IC 8,9,2
B: Register Test Sollte angesichts der Änderungen nochmal überprüft
werden . Die Ausgänge reagieren ABER sollte da positiv oder Negatives
Signal anliegen?
@Kurt S. (bmbbsr)
>Entschuldigung wenn ich etwas euphorisch wurde Metall-er und
Dafür mußt du dich nicht entschuldigen, wohl aber an deiner
Kommunikation arbeiten. Ich und der Rest des Forum sitzen nicht neben
dir. Also solltest du möglichst GENAU und umfassend beschreiben, wenn
was geht. Oder wenn was nicht geht.
>Ich habe nochmal alles Beschriftet und Durchgemessen>Es Haben sich Änderungen an den Steuer IC ergeben.>Geändert wurde auch IC4 zu IC12 Zeilensteuerung Negativ
Hmm.
>#Erkenntnis das die LIB mcp23017 zuerst den Steuerbus setzt dann den>Datenbus.
Sicher? Wie hast du das gemessen? Nur weil die Übertragung seriell
erfolgt, heißt das nicht, daß die Ausgabe auch zeitversetz erfolgt. Was
sagt das Datenblatt?
Aber selbst wenn es so wäre, ist das für die Software, so wie sie
aufgebaut ist, egal.
>Somit habe ich die LIB (cpp,h,keyword) bearbeitet.
Na, ob das der rechte Ansatz für einen Mechaniker ist, der so oder so
schon viel zu tun hat?
> nun werden die> Datenbits und Steuerbits separat geschrieben.
NEIN!
Hier ergibt sich für mich wieder das BIT Problem
>A void testCLK(uint8_t ziffer, uint8_t funktion) OK>Taktendes Signal an den Y der 138 IC 8,9,2
Auch in der rich´tigen Reihenfolge/Zuordnung?
>B: Register Test Sollte angesichts der Änderungen nochmal überprüft>werden . Die Ausgänge reagieren ABER sollte da positiv oder Negatives>Signal anliegen?
Es wird jeweils ein Bit auf HIGH gesetzt, die anderen auf LOW.
>geänderte LIB mcp23017
Die Änderung brauchst du nicht. Dann mußt du nämlich auch wieder ne
Menge andere Dinge in der Software ändern. Laß es.
@Kurt S. (bmbbsr)
> flipdot_V01.pdf | anzeigen
Wenn man eine korrigierte VErsion erstellt, sollte man das auch im Namen
kennzeichnen. Denn zweimal eine Datei mit gleichem Namen aber
verschiedenen Inhalten ist Mist.
Bist du sicher, daß C2 so angeschlossen ist, wie in deinem Plan? Das
wäre nämlich arg sinnlos.
Ich hab mal ein paar Schönheitsfehler korrigiert. Mit den korrigierten
Anschlüssen der LOW-Register ist die Kodierung auch wieder eindeutig und
gleichmäßig für LOW und HIGH.
Wenn A7 wirklich am CLR von IC11A hängt, muss das RESET des
Pulsgenerators immer wieder freigegeben werden. Oder A7 dauerhaft auf
HIGH bleiben. Ist kein Probblem, man muss es nur richtig machen. Hab ich
mal angepaßt, A7 bleibt jetzt immer auf HIGH, für die Dekodierung des
ChipSelects braucht man es hier nicht. Siehe Anhang.
Die Kodierung der Register für die LOW-Daten ist auch korrigiert.
Guten Tag
@ falk
Danke Zuerst Mal wir haben ein ERFOLG Ergebniss Zeile 3 und 4 Flippen
und bringen Muster.
der Rest Zeile 0-2 bleiben stumm.
In Schaltplan ist an IC8 PIN 6 mit A6 Verbunden DER ist an pin A7
Angelegt,
Ich Denke das ist aber ein versehen bei der Datenleitung Auswahl
gewesen.
was bewirkt
1
tmp=0x80>>z;[/c]in
2
[c]
3
voidsetzeZiffer(intziffer,intwert){
4
uint8_ttmp,muster;
5
6
if(ziffer>6)return;
7
8
for(intz=0;z<5;z++){
9
muster=hex2dot[wert][z];
10
tmp=0x80>>z;
Ist mir momentan nicht so klar.
Und für was Steht "Glitschfrei" im Arduino code
Es sieht nicht schlecht aus. und schnell ist das auch noch.
@Kurt S. (bmbbsr)
>Danke Zuerst Mal wir haben ein ERFOLG Ergebniss Zeile 3 und 4 Flippen>und bringen Muster.
Na immerhin.
>In Schaltplan ist an IC8 PIN 6 mit A6 Verbunden DER ist an pin A7>Angelegt,
Merkwürdiger Satz. Geht das auch auf deutsch?
>Ich Denke das ist aber ein versehen bei der Datenleitung Auswahl>gewesen.
Hattest du nicht gesagt, daß du alles nochmal geprüft, durchgemessen,
getestet und im Schaltplan aktualisiert hast? Was denn nun?
Hast du den Test der CLK-Generatoren und der Registerzugiffe VOLLSTÄNDIG
und ERFOLGREICH durchgeführt?
>was bewirkt> tmp = 0x80 >> z;
Man nehme den Wert 0x80, für dich 0b10000000, und schiebe ihn z mal nach
rechts. Damit wird die aktive Zeile angesprochen, alle anderen bleiben
inaktiv.
>Und für was Steht "Glitschfrei" im Arduino Code
Damit wird ABSOLUT sichergestellt, daß die CLK-Generatoren KEINE
Glitches verursachen können, was vor allem bei Takten an Registern
tödlich sein kann. Siehe Glitch.
>Es sieht nicht schlecht aus. und schnell ist das auch noch.
Naja, im Moment sind nach dem FlipPulse noch 500ms Pause drin, das war
der erste, konservative Ansatz. Die Pause kann man sicher noch
vermindern. Muß man mal testen.
Anbei mal ein Video vom Bisherigen Funktionstest.
Da stimmt irgendwas mit der Datenbits Umwandlung nicht es Flippen nur
4Dots je Ziffer.
Weiterhin angehängt die Laufende Arduino Datei.
Ich Bitte Weiterhin um Hilfe in Sachen Digitaltechnik Bitoperation.
Danke
@Kurt S. (bmbbsr)
Es wäre nett bis sinnvoll, wenn du meine Fragen aus vorherigen Beiträgen
beantworten würdest. Das sind die Sätze, welche mit dem Zeichen ? enden.
Du hast im Code einiges geändert. Die Kodierung der CLK-Dekoder, aber
VERSCHIEDEN für den Test und den normalen Registerzuugriff! Das ist
sicher nicht so gewollt.
Die Pause am Ende des FlipPulses muss sein!!! Denn sonst schaltest du
schon andere Zeilen ein, wenn die aktuelle noch flipt!!! Die Zeit für
Geschwindigkeitsoptimierungen ist JETZT noch nicht da! Mach die wieder
rein!
>Ich Bitte Weiterhin um Hilfe in Sachen Digitaltechnik Bitoperation.
Siehe Bitmanipulation.
Ich Bemühe mich nach Kräften.
>Merkwürdiger Satz. Geht das auch auf deutsch?
In Schaltplan ist an IC8 PIN6 mit A7 zu Verbinden!
>Hattest du nicht gesagt, daß du alles nochmal geprüft, durchgemessen,>getestet und im Schaltplan aktualisiert hast? Was denn nun?>Hast du den Test der CLK-Generatoren und der Registerzugiffe VOLLSTÄNDIG>und ERFOLGREICH durchgeführt?
Mehrmals das passt alles An den Eingängen der REGISTER IC.
Die Ausgänge werden ja beim Test nicht getriggert.
Ich musste die Setze Ziffer Dunklen und Hellen/Dots setzen drehen.
JETZT gehen zu mindestens alle Flipdots Aus.
Bei der Original sind Wilkürlich Spalte1 Zeile 2-4 aufgesprungen ON
###
Ich habe nun auch ein Osziloskop billig aber immerhin.
###
Beim Einschalten der Dots kommt auf den GPIOB Kein Zeilensignal
Beim Ausschalten sind 3 Pulse zusehen.
Ich teste mit Muster 0xFF ALLES AUS und 0x00 sollte Alles An sein.
Sind aber nur die 4 unten Rechts.
##
Pinout nochmal Port A klappt prima alles OK
GPIOB
B0 Steuert Spalte0
B1 Spalte1
B2 Spalte2
B3 Zeile0
B4 Zeile1
...
SOLLTE da nicht -> muster = ~muster & 0x03; EHER sein muster = ~muster &
0x07;
FRAGE: wo muss ich das Bitmuster abfangen,
Serial.println(tmp,BIN);
und warum wird das abgeschnitten zB. 10 nicht 00000010 da 8Bit
@ Kurt S. (bmbbsr)
> mcp_flipdot_v3.ino (5,47 KB, 0 Downloads) | Codeansicht> flipdot_V02.sch (526 KB, 0 Downloads)>Ich Bemühe mich nach Kräften.
Und bist schon wieder gescheitert. flipdot_V02.sch hatte ich
hochgeladen, du hättest nach der Änderung ein V03 draus machen sollen.
>>Merkwürdiger Satz. Geht das auch auf deutsch?>In Schaltplan ist an IC8 PIN6 mit A7 zu Verbinden!
OK, damit wird die Dekodierung auch etwas logischer. A6 ist demnach
unbenutzt.
>Mehrmals das passt alles An den Eingängen der REGISTER IC.
Gut.
>Die Ausgänge werden ja beim Test nicht getriggert.
??
Meinst du die Ausgänge der Leistungstreiber ULN/UDN?
>Ich musste die Setze Ziffer Dunklen und Hellen/Dots setzen drehen.
Kann sein, das war geraten.
>JETZT gehen zu mindestens alle Flipdots Aus.
Schon mal was.
>Beim Einschalten der Dots kommt auf den GPIOB Kein Zeilensignal
Merkwürdig.
>Ich teste mit Muster 0xFF ALLES AUS und 0x00 sollte Alles An sein.>Sind aber nur die 4 unten Rechts.
Welche denn?
>SOLLTE da nicht -> muster = ~muster & 0x03; EHER sein muster = ~muster &>0x07;
Ja, mein Fehler!
Und du hast IMMER NOCH den Fehler in der CLK Dekodierung drin! Kein
Wunder daß der TEST zwar geht, der echte Registerzugriff aber nicht!
>FRAGE: wo muss ich das Bitmuster abfangen,> Serial.println(tmp,BIN);>und warum wird das abgeschnitten zB. 10 nicht 00000010 da 8Bit
Weil die bei Arduino ein wenig doof sind und keie gescheite, formatierte
Ausgabe haben. Wenn du das willst, mußt du das selber programmieren.
Ich hab mal wieder aufgeräumt und die Fehler korrigiert. Siehe Anhang.
Neuer Versuch Aus Geht
An Nicht
>Meinst du die Ausgänge der Leistungstreiber ULN/UDN?
ich messe nur die Logik nicht die Leistungstreiber Netzteil Labor 0,2A
KANN Es Sein das die Initialisierung Probleme macht mit allem High (Nur
eine Idee)
Und das Timing der Register Setzung da ja IC 10 eine eigene Taktung hat.
Anbei der Beweis alles aus. ## ICH teste nur Ziffer 0 da ich die Im
Betrieb nicht Brauche. Sollte mal was schief laufen
Hier die Logik Ausgabe:
Clear Display
Zeile- 0 Dots off -> tmp 10000000 -> muster 00000111
Zeile- 0 Dots ON -> tmp 10000000 -> muster 00000000
Zeile- 1 Dots off -> tmp 01000000 -> muster 00000111
Zeile- 1 Dots ON -> tmp 01000000 -> muster 00000000
Zeile- 2 Dots off -> tmp 00100000 -> muster 00000111
Zeile- 2 Dots ON -> tmp 00100000 -> muster 00000000
Zeile- 3 Dots off -> tmp 00010000 -> muster 00000111
Zeile- 3 Dots ON -> tmp 00010000 -> muster 00000000
Zeile- 4 Dots off -> tmp 00001000 -> muster 00000111
Zeile- 4 Dots ON -> tmp 00001000 -> muster 00000000
DOTS Cleard
SET ALL
Zeile- 0 Dots off -> tmp 10000000 -> muster 00000000
Zeile- 0 Dots ON -> tmp 10000000 -> muster 00000111
Zeile- 1 Dots off -> tmp 01000000 -> muster 00000000
Zeile- 1 Dots ON -> tmp 01000000 -> muster 00000111
Zeile- 2 Dots off -> tmp 00100000 -> muster 00000000
Zeile- 2 Dots ON -> tmp 00100000 -> muster 00000111
Zeile- 3 Dots off -> tmp 00010000 -> muster 00000000
Zeile- 3 Dots ON -> tmp 00010000 -> muster 00000111
Zeile- 4 Dots off -> tmp 00001000 -> muster 00000000
Zeile- 4 Dots ON -> tmp 00001000 -> muster 00000111
@Kurt S. (bmbbsr)
>Neuer Versuch Aus Geht>An Nicht
Und wie bekommst du die FlipDots dann an?
>>Meinst du die Ausgänge der Leistungstreiber ULN/UDN?>ich messe nur die Logik nicht die Leistungstreiber Netzteil Labor 0,2A
Und mit welchem Netzteil versorgst du die Anzeige für den Test? 0,2A
klingt mir recht wenig.
>KANN Es Sein das die Initialisierung Probleme macht mit allem High (Nur>eine Idee)
Nein. Vor allem dann nicht, wenn der Registerzugriff WIRKLICH
funktioniert. Dann ist es eher zu wenig Strom. Möglicherweise brauchen
die FlipDots zum Einschalten deutlich mehr Strom als zum Ausschalten.
Ich würde mal mit 1-2A ins Rennen gehen.
>Und das Timing der Register Setzung da ja IC 10 eine eigene Taktung hat.
???
>Anbei der Beweis alles aus. ## ICH teste nur Ziffer 0 da ich die Im>Betrieb nicht Brauche. Sollte mal was schief laufen
Das sollte die Logik auf dem Board verhindern.
>Hier die Logik Ausgabe:
Naja, man sieht auf deinem Video, daß Zeile 1 unten ist. Man muss also
oben anfangen. Aber das ist nebensächlich. Erstmal muß die Anzeige der
aktiven Pixel laufen.
@ falk
>Und wie bekommst du die FlipDots dann an?
Mit 2 Kabeln direkt auf ULN UDN Pin2
>Und mit welchem Netzteil versorgst du die Anzeige für den Test? 0,2A>klingt mir recht wenig.
Labornetzteil Begrenzung Ampere
>Ich würde mal mit 1-2A ins Rennen gehen.
Die Untere Reihen schalten JA mit Strombegrenzung und man sieht auch bei
80mA Strombegrenzung das Sie Flippen wollen.
>Naja, man sieht auf deinem Video, daß Zeile 1 unten ist. Man muss also>oben anfangen. Aber das ist nebensächlich. Erstmal muß die Anzeige der>aktiven Pixel laufen.
DA Ist Was Nicht so wie es sein Soll den Zeilendrehung während des Laufs
?
Phänomen
Mit dem Arduino Code gehen die unteren Zeilen AN aber Nicht wieder Aus
1
voidsetzeZiffer(intziffer,intwert){
2
uint8_ttmp,muster;
3
if(ziffer>6)return;
4
for(intz=3;z<5;z++){
SO gehen die unteren Zeilen Aus aber nicht wieder AN
1
voidsetzeZiffer(intziffer,intwert){
2
uint8_ttmp,muster;
3
if(ziffer>6)return;
4
for(intz=0;z<2;z++){
Natürlich Unlogisch gehen Sie dann mit dem Hier An und Aus Kopfweh
@Kurt S. (bmbbsr)
>>Und wie bekommst du die FlipDots dann an?>Mit 2 Kabeln direkt auf ULN UDN Pin2
Das heißt aber, daß der UDN funktioniert. Merkwürdig.
>>Und mit welchem Netzteil versorgst du die Anzeige für den Test? 0,2A>>klingt mir recht wenig.>Labornetzteil Begrenzung Ampere
Geht es nicht noch etwas sparsamer? Ich weiß, Techniker sind keine
Literaten und Plaudertaschen, aber ein paar vernünftige Sätze kann man
wohl verlangen.
>Die Untere Reihen schalten JA mit Strombegrenzung und man sieht auch bei>80mA Strombegrenzung das Sie Flippen wollen.
Hmm.
>>Naja, man sieht auf deinem Video, daß Zeile 1 unten ist. Man muss also>>oben anfangen. Aber das ist nebensächlich. Erstmal muß die Anzeige der>>aktiven Pixel laufen.>DA Ist Was Nicht so wie es sein Soll
Schon klar. Die Änderung ist einfach!!!
Ändere folgende Zeile in setzeZiffer()
tmp = 0x08 << z;
>Phänomen>Mit dem Arduino Code gehen die unteren Zeilen AN aber Nicht wieder Aus>void setzeZiffer(int ziffer, int wert) {> uint8_t tmp, muster;> if (ziffer > 6) return;> for (int z=3; z<5; z++) {>SO gehen die unteren Zeilen Aus aber nicht wieder AN>void setzeZiffer(int ziffer, int wert) {> uint8_t tmp, muster;> if (ziffer > 6) return;> for (int z=0; z<2; z++) {
Klingt danach, als ob dein Schaltplan doch nicht stimmt. Miß nochmal
GENAU nach, ob die Bits wirklich an den richtigen Stellen der Register
und Treiber ankommen!
Der Fehler kann nur in der Software sein.
mittlerweile messe ich das komplette System schon zum 10 mal Pin für Pin
Die Hardware passt so 100 %
sonst würde beim Rücksetzen was nicht passen
da werden ja die Zeilen auch Einzel Dunkel und für alle Ziffern
Ich bin immer noch der Meinung das die Ports A/B niemals Gleichzeitig
wechseln dürfen. Wir setzen ja immer alle 16 Bits um
und zumal zuerst der Port A Geschaltet wird von der LIB nicht die
Daten Vor dem Steuersignal wie üblich .
@ Kurt S. (bmbbsr)
>Ich bin immer noch der Meinung das die Ports A/B niemals Gleichzeitig>wechseln dürfen.
Das tun sie ja nicht, denn die Daten auf GPB werden mehrfach, aber
IDENTISCH geschieben.
> Wir setzen ja immer alle 16 Bits um
Das ist kein Problem, erst recht nicht, wenn man es richig macht. Und
bis zum Beweis des Gegenteils behaupte ich, daß es richig gemacht wird.
>und zumal zuerst der Port A Geschaltet wird von der LIB nicht die>Daten Vor dem Steuersignal wie üblich .
Doch, ganz am Anfang!!!
Was noch denkbar ist, daß du in deinem Schaltplan IC5 und IC4
verwechselt hast. Denn dann kann es passieren, daß die Schutzschaltung
in IC1 das Schalten verhindert. Das kann man mal testen.
Danke Für den Hinweis
Der Schaltplan Stimmt aber so korrekt,nichts vertauscht.
Diese Woche sind Prüfungen.
Ich werde mich erst Freitag wieder melden!
Leider ausser den Unteren Beiden Zeilen an allen Ziffern die nach
belieben codieren kann. Volle Funktion
an den oberen 3 Zeilen kein Erfolg.
Das Wird schon werden Hoffe Ich
Wenn du willst, kannst du mir den Kram komplett zuschicken und ich
bring's zum Laufen. Wenn du aber die sportliche Herausforderung suchst
und es selber machen willst, dann eher nicht ;-)
@ Falk D
Danke für das Angebot momentan bastle ich noch etwas weiter!
DER Obige Arduino Code SETZE ZIFFER Gedreht bring überhaupt kein Output.
Ich werde heute und Morgen mal eine Schnelle Platine Fräsen Habe gerade
die PCB Fräse hier. Zweck: Ausschliessen das irgend ein Kontakt wackelt!
ich melde mich Morgen wieder.
Neues von der Flipdot Front
Control Board erstellt gefräst und Gelötet
Daten Anbei
Leider ist beim Controllbus eine Änderung eingetreten Pins Vertauscht
Kein grosser Akt aber der Code Ändert sich.
1
#define DEOCDE_IC4 0b11110000
2
#define DEOCDE_IC5 0b11011000
3
#define DEOCDE_IC3 0b11101000
DAS Ergebniss ist aber das Gleiche nur die unteren Beiden Zeilen sind
zum Anschalten der Dots zu Bewegen
Aber Ausschalten lassen sie sich alle.
SOMIT ist Hardwaremässig alles in Ordnung!
Die Zeilen sind ja Bit 11-15 da stimmt was mit dem Bitshift nicht im
16Bit GPIO Muster
Analyse Folgt
Analyse Daten zum Neuen Arduino Code
Ich habe Beide Dateien angehängt.
Zeile3 Dot1 wird nicht gesetzt
Zeile2 dot1 WIRD
Zeile1 dot1 WIRD
In der TXT Datei ab Abschnitt ## SET
Ich bitte weiterhin um Unterstützung mit der Bitmuster Logik
Danke
Kurt S. schrieb:> Ich bitte weiterhin um Unterstützung mit der Bitmuster Logik
Manoman.
Ich habe selten so etwas unnötig kompliziertes gesehen...
Für so etwas (3 Ziffern a 3x5 Dots) braucht man 5 + 3 * 3 = 14
Leitungen insgesamt, also nimmt man 1 x UDN, 1 x ULN, 1 x NPN/PNP,
je nachdem ob CC oder CA, 10 x Widerstände und 1 x MCP23017.
Das sind 3 (DREI) ICs.
Falls einzelne Dots nicht mehr als 25mA brauchen, reicht nur ein
MCP23017 und 9 Widerstände.
Das ist 1 (EIN) IC.
Displays werden reihenweise angesteuert, alle 3 Displays zusammen,
d.h. 5 Reihen nacheinander, bei einer Refresh rate von 50/sec =
5 x 50 = 250/sec = 4ms Interrupt.
Setzen der Ports wird im Interrupt erledigt, dauert kaum Zeit.
Main() braucht nur die Daten für darzustellende Ziffern oder Zeichen
ins RAM zu kopieren (aber nur wenn die Daten sich ändern), ansonsten
merkt er kaum etwas davon.
Wozu Ihr beide über 20 ICs und mehr als 250 Zeilen Code braucht,
wird für mich ein ewiges Rätsel bleiben...
P.S.
Selbstverständlich kann auch ein Arduino ohne MCP23017 das Ganze
ohne Probleme steuern...
Danke
leider ist die Steuerung so fertig und ich würde ungern alles auslöten
und neu aufbauen.
Des weiteren braucht es ja auch ein Rücksetzung also alles umgekehrt
Mal sehen ob ich das hin-bekomme
########
ERFOLG
########
Das Negieren des Systems brachte mun den Erfolg
Es klackert zwar nun um so mehr und ich brauche auch 400mA
Aber es Funktioniert.
anbei die Final Dateien und das Video
DANKE AN DIE HELFER
@Kurt S. (bmbbsr)
>Das Negieren des Systems brachte mun den Erfolg
???
Was hast du denn negiert?
Ob das hier so gewollt ist?
setZiffer...
tmp = 0x07 << z;
Damit werden drei Zeilen geleichzeitig angesteuert.
Falk B. schrieb:>>Das Negieren des Systems brachte mun den Erfolg>> ???> Was hast du denn negiert?
Ich glaube mit negieren meint er, dass zuerst alle Dots gesetzt
werden und dann, je nach Wert, die entsprechenden Dots gelöscht
werden.
P.S.
Was weder so klappt wie gewünscht, noch ist es irgendwie
besser als anders rum.