Hallo, ich bin ziemlicher neuling hier auf dem Gebiet und möchte mit einer 7x7 Led-Anzeige das ABC anzeigen. Das ganze hatte ich vor mit Bitmasken zu machen und auch schon den code geschrieben der wahscheinlich mit fehlern über häuft ist. Fakt ist beim Builden sagt er das es so nich klappt, ich weiß aber nicht was ich ändern muss dann es funktioniert. Ich habe den code nochmal als screeshot hochgeladen weil er hier total durcheinander ist. #include <avr/io.h> int main (void) { int z=10000; int derBuchstabe=0; DDRC = 0xff; DDRD = 0xff; PORTC = (0<<PC0) & (0<<PC1) & (0<<PC2) & (0<<PC3) & (0<<PC4) & (0<<PC5) & (0<<PC6) & (0<<PC7); PORTD = (0<<PD0) & (0<<PD1) & (0<<PD2) & (0<<PD3) & (0<<PD4) & (0<<PC5) & (0<<PD6) & (0<<PD7); uint8_t r16; uint8_t r17; if(derBuchstabe==0){ while(z<0){ PORTC=0b00011000 & PORTD=0b01000000; PORTC =0b00000000 & PORTD =0b00000000; PORTC=0b00100010 & PORTD=0b00100000; PORTC =0b00000000 & PORTD =0b00000000; PORTC=0b01000001 & PORTD=0b00010000; PORTC =0b00000000 & PORTD =0b00000000; PORTC=0b01111111 & PORTD=0b00001000; PORTC =0b00000000 & PORTD =0b00000000; PORTC=0b01000001 & PORTD=0b00000100; PORTC =0b00000000 & PORTD =0b00000000; PORTC=0b01000001 & PORTD=0b00000010; PORTC =0b00000000 & PORTD =0b00000000; PORTC=0b01000001 & PORTD=0b00000001; PORTC =0b00000000 & PORTD =0b00000000; z=z-1; if(z==1){ derBuchstabe=derBuchstabe+1; } } } if(derBuchstabe==1){ z=10000; while(z<0){ PORTC =0b01111000 & PORTD =0b01000000; PORTC =0b00000000 & PORTD =0b00000000; PORTC =0b01000010 & PORTD =0b00100000; PORTC =0b00000000 & PORTD =0b00000000; PORTC =0b01000001 & PORTD =0b00010000; PORTC =0b00000000 & PORTD =0b00000000; PORTC =0b01111111 & PORTD =0b00001000; PORTC =0b00000000 & PORTD =0b00000000; PORTC =0b01000001 & PORTD =0b00000100; PORTC =0b00000000 & PORTD =0b00000000; PORTC =0b01000010 & PORTD =0b00000010; PORTC =0b00000000 & PORTD =0b00000000; PORTC =0b01111100 & PORTD =0b00000001; PORTC =0b00000000 & PORTD =0b00000000; z=z+1; if(z==1){ derBuchstabe=derBuchstabe+1; } } } Danke schonma im vorraus
@ Andreas Berger (Firma: keine) (andy123) > code.png > 85,4 KB, 8 Downloads Wie kommt man auf die Idee, Quelltext als Screenshot zu posten? Wichtige Regeln - erst lesen, dann posten! * Groß- und Kleinschreibung verwenden * Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang Lies mal was über Netiquette. >Hallo, ich bin ziemlicher neuling hier auf dem Gebiet und möchte mit >einer 7x7 Led-Anzeige das ABC anzeigen. Das ganze hatte ich vor mit >Bitmasken zu machen und auch schon den code geschrieben Der nicht viel taugt. Lies ein Grundlagenbuch über C, und vor allem was über Arrays. >Ich habe den code nochmal als screeshot hochgeladen weil er hier total >durcheinander ist. Optimale Vorraussetzungen zum programmieren. Wenn du so programmierst wie du hier Beträge schreibst, solltest du dir ein anderes Hobby suchen. MFG Falk
Hallo Andreas, so sieht der Quelltext auch im Forum gut aus:
1 | #include <avr/io.h> |
2 | |
3 | int main (void) |
4 | {
|
5 | int z=10000; |
6 | int derBuchstabe=0; |
7 | DDRC = 0xff; |
8 | DDRD = 0xff; |
9 | PORTC = (0<<PC0) & (0<<PC1) & (0<<PC2) & (0<<PC3) & (0<<PC4) & (0<<PC5) & (0<<PC6) & (0<<PC7); |
10 | PORTD = (0<<PD0) & (0<<PD1) & (0<<PD2) & (0<<PD3) & (0<<PD4) & (0<<PC5) & (0<<PD6) & (0<<PD7); |
11 | uint8_t r16; |
12 | uint8_t r17; |
13 | |
14 | if(derBuchstabe==0) |
15 | {
|
16 | while(z<0) |
17 | {
|
18 | PORTC=0b00011000 & PORTD=0b01000000; PORTC =0b00000000 & PORTD=0b00000000; |
19 | PORTC=0b00100010 & PORTD=0b00100000; PORTC =0b00000000 & PORTD=0b00000000; |
20 | PORTC=0b01000001 & PORTD=0b00010000; PORTC =0b00000000 & PORTD=0b00000000; |
21 | PORTC=0b01111111 & PORTD=0b00001000; PORTC =0b00000000 & PORTD=0b00000000; |
22 | PORTC=0b01000001 & PORTD=0b00000100; PORTC =0b00000000 & PORTD=0b00000000; |
23 | PORTC=0b01000001 & PORTD=0b00000010; PORTC =0b00000000 & PORTD=0b00000000; |
24 | PORTC=0b01000001 & PORTD=0b00000001; PORTC =0b00000000 & PORTD=0b00000000; |
25 | |
26 | z=z-1; |
27 | if(z==1) |
28 | {
|
29 | derBuchstabe=derBuchstabe+1; |
30 | }
|
31 | }
|
32 | }
|
33 | |
34 | if(derBuchstabe==1) |
35 | {
|
36 | z=10000; |
37 | while(z<0) |
38 | {
|
39 | PORTC =0b01111000 & PORTD =0b01000000; PORTC =0b00000000 & PORTD=0b00000000; |
40 | PORTC =0b01000010 & PORTD =0b00100000; PORTC =0b00000000 & PORTD=0b00000000; |
41 | PORTC =0b01000001 & PORTD =0b00010000; PORTC =0b00000000 & PORTD=0b00000000; |
42 | PORTC =0b01111111 & PORTD =0b00001000; PORTC =0b00000000 & PORTD=0b00000000; |
43 | PORTC =0b01000001 & PORTD =0b00000100; PORTC =0b00000000 & PORTD=0b00000000; |
44 | PORTC =0b01000010 & PORTD =0b00000010; PORTC =0b00000000 & PORTD=0b00000000; |
45 | PORTC =0b01111100 & PORTD =0b00000001; PORTC =0b00000000 & PORTD=0b00000000; |
46 | z=z+1; |
47 | if(z==1) |
48 | {
|
49 | derBuchstabe=derBuchstabe+1; |
50 | }
|
51 | }
|
52 | }
|
Es wäre sehr hilfreich, wenn du uns mal sagen würdest, welcher Fehler denn ausgegeben wird. Welche Zeile usw. Glaskugeln haben wir hier leider keine! Dir fehlt eine schließende Klammer! Mal davon abgesehen, dass deine Anweisungen wie z.B.
1 | PORTC=0b00011000 & PORTD=0b01000000; PORTC =0b00000000 & PORTD=0b00000000; |
nicht viel Sinn machen. Was willst du damit bezwecken? Ein Schaltplan wäre auch sehr hilfreich! Grüße Thomas
../LED.c:15: error: lvalue required as left operand of assignment Das ist der Fehler der die ganze Zeit aufkommt. PORTD=0b00011000 & PORTC=0b01000000; PORTD =0b00000000 &PORTC=0b00000000; Ups habe eben grade bemerkt das ich x und y vertauscht habe also PortC = Y-Achse und D = X-Achse PORTD=0b00011000 & PORTC=0b01000000; PORTD =0b00000000 &PORTC=0b00000000; Hiermit will ich das PortD Pin 3 und 4 anschaltet und Port C pin 7 anschaltet und somit die Leds leuchten, am Ende werden sie wieder ausgeschaltet und die nächste Reihe ist dran. Das ganze soll dann ganz schnell wiederholt werden damit es so ausieht als würden die Leds leuchten
wie Falk schon sagt. Ließ dir mal das Thema Bitmanipulation durch. Auch hilfreich: In welcher Reihenfolge werden Operanten aufgelöst! Was du hier machst ist gemilde ausgedrückt Schrott. Wenn du um deine Zuweisung jeweils eine Klammer setzt, dann sollte es klappen. Ist aber immer noch Schrott. Du weist dem PortC und D einen neuen Wert zu. Das Ergebnis der Zuweisung, also der Wert selbst, wird jeweils und-verknüpft und das Ergebnis verworfen. Der Optimizer wirds zum glück schon richten. Was aber immer noch nicht dein Problem löst, dass du nur einen Impuls von ein paar µs erzeugst. Denn du schaltetst ein paar Takte weiter deine LED wieder aus. Da sollte zumindest mal ein sleep zwischenrein. Oder du pulst deine LED mit so viel Strom, dass die bei der kurzen Zeit schon leuchten(was bei deiner Schaltung sicher nicht der Fall ist). Probiers mal so:
1 | PORTD=0b00011000; |
2 | PORTC=0b01000000; |
3 | _sleep_ms(1); |
4 | PORTD=0b00000000; |
5 | PORTC=0b00000000; |
Das sollte zumindest schon mal ein kleines Ergebnis bringen. Vorher natürlich die delay.h includieren! Grüße Thomas
bzw. du brauchst die LED garnicht auszuschalten, da du sie ja eh mit den nächsten Befehlen neu setzt!
Ok vielen dank für deine Hilfe jetzt klappt das ganze schon besser sind keine Fehler laut build mehr drin Oo. Ich werde mich nochmal melden falls ich nochmal deine Hilfe brauch.... tausend Dank.
@ Andreas Berger (Firma: keine) (andy123)
>Ich werde mich nochmal melden falls ich nochmal deine Hilfe brauch....
ist das eine Drohung? 8-0
Ich würde erstmal mit den Grundlagen anfangen. Wenn Du multiplexen willst, sind erstmal Timerinterrupt und Arrays zu beherrschen. Der Timerinterrupt gibt Dir auf einfachste Weise konstante Leuchtintervalle der Spalten. Das schaffst Du nie in der Mainloop bzw. es ist extrem umständlich. Und Arrays (im Flash) brauchst Du, um die einzelnen Bitmuster zu erzeugen. Sich mit einzelnen Ladebefehlen abzugeben ist dagegen die reinste Quälerei und extrem fehlerträchtig (Monster-Spaghetticode). Programmierleistung wird nicht nach Codegröße bezahlt, sondern nach Funktion und Wartbarkeit. Es wäre also schade, wenn Du erstmal mit Zeilenschinden anfängst und dann später richtig programmieren lernst. Peter
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.