hi, ich versuche mich gerade an einem 7seg display und bin mir nicht sicher warum es nicht funktionieren will ;) liegt es an der soft- oder hardware ? deshalb die frage ob der angehängte plan so funkitionieren sollte danke fürs drüber schauen
Problem ist ja schon gelöst. Aber ein Hinweis noch ... die Transistoren für die PWM hättest du auch sparen können. Die PWM einfach auf /G gelegt hätte das gleiche Ergebnis.
mit dem testcode hier tut sich da leider garnix ;(
1 | #define _DATA 4 |
2 | #define _LATCH 5 |
3 | #define _CLOCK 6 |
4 | |
5 | byte data; |
6 | byte dataArray[10]; |
7 | |
8 | void shiftOut(byte dataOut) { |
9 | int i=0; |
10 | int pinState; |
11 | pinMode(_CLOCK, OUTPUT); |
12 | pinMode(_DATA, OUTPUT); |
13 | digitalWrite(_DATA, LOW); |
14 | digitalWrite(_CLOCK, LOW); |
15 | for (i=7; i>=0; i--) { |
16 | digitalWrite(_CLOCK, LOW); |
17 | if ( dataOut & (1<<i) ) { |
18 | pinState = 1; |
19 | } else { |
20 | pinState = 0; |
21 | } |
22 | Serial.print(pinState); |
23 | digitalWrite(_DATA, pinState); |
24 | digitalWrite(_CLOCK, HIGH); |
25 | digitalWrite(_DATA, LOW); |
26 | } |
27 | Serial.println(); |
28 | digitalWrite(_CLOCK, LOW); |
29 | } |
30 | |
31 | void setup() { |
32 | pinMode(LED_BUILTIN, OUTPUT); |
33 | digitalWrite(LED_BUILTIN, LOW); |
34 | |
35 | pinMode(_DATA, OUTPUT); |
36 | pinMode(_LATCH, OUTPUT); |
37 | pinMode(_CLOCK, OUTPUT); |
38 | digitalWrite(_DATA, LOW); |
39 | digitalWrite(_LATCH, LOW); |
40 | digitalWrite(_CLOCK, LOW); |
41 | |
42 | dataArray[0] = 0xFF; //0b11111111 |
43 | dataArray[1] = 0xFE; //0b11111110 |
44 | dataArray[2] = 0xFC; //0b11111100 |
45 | dataArray[3] = 0xF8; //0b11111000 |
46 | dataArray[4] = 0xF0; //0b11110000 |
47 | dataArray[5] = 0xE0; //0b11100000 |
48 | dataArray[6] = 0xC0; //0b11000000 |
49 | dataArray[7] = 0x80; //0b10000000 |
50 | dataArray[8] = 0x00; //0b00000000 |
51 | dataArray[9] = 0xE0; //0b11100000 |
52 | } |
53 | |
54 | void loop() { |
55 | for (int j = 0; j < 10; j++) { |
56 | digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); |
57 | data = dataArray[j]; |
58 | digitalWrite(_LATCH, LOW); |
59 | shiftOut(data); |
60 | digitalWrite(_LATCH, HIGH); |
61 | delay(500); |
62 | } |
63 | } |
Ray M. schrieb: > mit dem testcode hier tut sich da leider garnix ;( Du solltest ein Scope anschliessen. Gruss
Ray M. schrieb: > mit dem testcode hier tut sich da leider garnix ;( Gar nix? Nicht mal die LED blinkt? Ein Mehrkanaloszi (min. 2) ist zur Inbetriebnahme von solchen seriellen Schnittstellen eigentlich unumgänglich.
:
Bearbeitet durch Moderator
Erich schrieb: > Ray M. schrieb: >> mit dem testcode hier tut sich da leider garnix ;( > > Du solltest ein Scope anschliessen. hab ich nicht ...
Lothar M. schrieb: > Ray M. schrieb: >> mit dem testcode hier tut sich da leider garnix ;( > Gar nix? Nicht mal die LED blinkt? genau ... wenn ich mit nem multimeter die ausgänge vom tpic messe kommt da auch nix raus ;(
Ray M. schrieb: >> Du solltest ein Scope anschliessen. > hab ich nicht ... Wünsch dir eines zu Ostern. Oder kauf dir einen billigen Logikanalyzer-Clone in der Bucht. Du wirst damit sehen, ob was passiert und zudem auch noch was passiert. Ray M. schrieb: >> Nicht mal die LED blinkt? > genau ... Dann solltest du zuerst mal die LED zum Blinken bringen... > wenn ich mit nem multimeter die ausgänge vom tpic messe kommt da auch > nix raus ;( Die Ausgänge sind uninteressant. Das ist, wie wenn du eine Wasserversorgung baust, dann den Hana aufdrehst und nichts kommt. Viel interessanter wäre doch, ob die Quelle Wasser hat, ob die Pumpe läuft, ob die Leitungen dicht sind und alle Schieber auf Durchgang stehen. Das erkannst du nicht am Wasserhahn. Fazit: miss zuerst an den µC-Pins. Dort wirkt dein Programm. Wenn du kein geeignetes Messgerät hast, dann beschaff dir eines. Sonst kommst du nicht weiter...
:
Bearbeitet durch Moderator
was soll ich mit einem gerät was ich nicht bedienen kann, nicht verstehe, was soll mir das bringen ein schiftregister und einige led's in einer 7seg-anzeige sind doch keine raumfahrttechnik
Ray M. schrieb: > was soll ich mit einem gerät was ich nicht bedienen kann, nicht verstehe, Kennst du das Wort "lernen"? > was soll mir das bringen DU willst das doch zum Laufen bringen. > ein schiftregister und einige led's in einer 7seg-anzeige sind doch > keine raumfahrttechnik Du sagst es. Aber trotzdem nicht so simpel, dass es einfach so geht...
das ist schon richtig, aber wenn ich z.b. für 10sec einen port des registers an schalte, müsste ich am ausgang auch mit einem multimeter was messen können
1 | void loop() { |
2 | for (int j = 0; j < 10; j++) { |
3 | ... |
4 | ... |
5 | ... |
6 | delay(10000); |
7 | } |
8 | } |
stellt sich mir die frage ob eventuell das rumgeshifte auf einem 32bit arm falsch ist ??? denn verdrahtet ist es ja nun anscheinend richtig ...
1 | ... |
2 | ... |
3 | if ( dataOut & (1<<i) ) { |
4 | ... |
5 | ... |
Ray M. schrieb: > aber wenn ich z.b. für 10sec einen port des registers an schalte, > müsste ich am ausgang auch mit einem multimeter was messen können Richtig. Du solltest zuerst mal das zum Laufen bekommen:
1 | void loop() { |
2 | for (int j = 0; j < 10; j++) { |
3 | digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); |
4 | // data = dataArray[j];
|
5 | // digitalWrite(_LATCH, LOW);
|
6 | // shiftOut(data);
|
7 | // digitalWrite(_LATCH, HIGH);
|
8 | delay(10000); |
9 | }
|
10 | }
|
Und wenn das geht, dann kannst du nach dem Rest schauen... BTW: die Zeile kann je nach Beschaltung des Ports durchaus in die Hose gehen: digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); Ich würde da sowas schreiben digitalWrite(LED_BUILTIN, j&1);
Lothar M. schrieb: > Ray M. schrieb: >> aber wenn ich z.b. für 10sec einen port des registers an schalte, >> müsste ich am ausgang auch mit einem multimeter was messen können > Richtig. > Du solltest zuerst mal das zum Laufen bekommen: >
1 | > void loop() { |
2 | > for (int j = 0; j < 10; j++) { |
3 | > digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); |
4 | > // data = dataArray[j]; |
5 | > // digitalWrite(_LATCH, LOW); |
6 | > // shiftOut(data); |
7 | > // digitalWrite(_LATCH, HIGH); |
8 | > delay(10000); |
9 | > } |
10 | > } |
11 | >
|
> Und wenn das geht, dann kannst du nach dem Rest schauen... ich verstehe nicht was du mir sagen willst ... aktuell bekomme im register keinen port angeschaltet und weis nicht warum ? > BTW: die Zeile kann je nach Beschaltung des Ports durchaus in die Hose > gehen: joop, aber da ist aktuell nix dran ;) > digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); > Ich würde da sowas schreiben > digitalWrite(LED_BUILTIN, j&1);
Ray M. schrieb: > ich hoffe ich hab es jetzt ??? Da ist immer noch was vertauscht: CLOCK und LATCH - CLOCK muss an SRCK (Serial Register Clock) - LATCH muss an RCK (Register Clock) Ich habe jetzt nicht geschaut, wie das Programm die Leitungen bedient und ob eventuell nur die Namen falsch sind.
ok ... ich hab das aktuell so pin4 --> SER_IN pin5 --> RCK pin6 --> SRCK also müssten das folgende passen ??? #define _DATA 4 #define _LATCH 5 #define _CLOCK 6 richtig ?
:
Bearbeitet durch User
ohh jee ... ich hab auf meiner platine ja noch die transistoren für pwm, das sollte man schon anschalten ... analogWriteResolution(12); pinMode(_PWM_OUT, OUTPUT); analogWrite(_PWM_OUT, 500); das wirkt echt wunder ;) danke für die klärung zum thema clock/latch/data und wo das dran gehört ... jetzt macht es bunt, zwar noch falsch aber krieg ich hin danke für eure hilfe ...
Lothar M. schrieb: > Ein Mehrkanaloszi (min. 2) ist zur Inbetriebnahme von solchen seriellen > Schnittstellen eigentlich unumgänglich. Ja sag mal! Für so ein simples Schiebeegister brauchst du einen Mehrkanal-Oszi? W.S.
Ray M. schrieb: > Erdowahn schrieb: >> Abblockkondensatoren fehlen. > > wo ? Ich sehe auch nicht, wo Da Einer fehlt ;) ... sorry ...
W.S. schrieb: > Für so ein simples Schiebeegister brauchst du einen Mehrkanal-Oszi? Einmal gekauft und nie bereut... ? Auf jeden Fall hätte ich damit den Fehler hier nach spätestens 10 Minuten gehabt. Inklusive der PWM-Geschichte.
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Auf jeden Fall hätte ich damit den Fehler hier nach spätestens 10 > Minuten gehabt. Inklusive der PWM-Geschichte. Da reicht auch ein simples Multimeter völlig aus. Oder notfals ne LED mit Vorwiderstand. Das Hauptproblem ist aber, daß hier immer nur kleine Codeschnipselchen gepostet werden und nie ein compilierbarer Code. Sonst wäre auch ganz ohne Meßmittel jemandem die fehlende PWM aufgefallen. Ist es denn wirklich so unsäglich schwer, ein *.c auf "Dateianhang" zu droppen :-(
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.