Hallo! Folgendes Problem: - IC1 zeigt ein merkwürdiges verhalten. Wenn die Positive Flanke kommt, sieht man keine veränderung. Wackelt man aber am Kabel(NEIN! Kein Wackelkontackt!) oder misst nach ob die Flanke kommt, funktiiniert es wieder. Misst man nichtmehr geht es auch nichtmehr. IC2 funktioniert einwndfrei. Das selber Problem bei zwei gleichen Platinen. Zum weiteren Aufbau. Zwei dieser Platinen sind an einen Atmega8 angeschlossen. An JP4 liegen die Werte an. Danach wird an JP5 jeweils das richtige Clock signal gegeben. an IC4 und IC3 hängen jeweils LEDs. Diese ICs sind ULN28003. Hat jemand eine Idee woher dieses komische verhalten kommen kann? Ich hoffe ihr versteht was mein Problem ist. InFaIN
Wie sieht deine Software aus? Kommen die Pulse sauber an? Wie steil sind die Flanken? Was passiert, wenn du an JP5 mal 1 und 2 brückst?
Hallo egal was sonst passiert, da fehlen Blockkondensatoren!!! Wie lang ist das Verbindungskabel ?
Hallo @Lothar: - Wenn ich Brücke dann kommt die CLK an... - Den Schaltplan hänge ich unten an... Die restlichen fragen kann ich nicht beantworten, da ich kein Oszilloskop besitze... @karadur: Wohin müssten denn die fehlenden Blockkondensatoren? Als Verbindungskabel verwende ich Platinensteckverbinder... ca. 25cm InFaIN Der Code:
1 | #include <avr/io.h> |
2 | #include <avr/delay.h> |
3 | |
4 | |
5 | #define LED0 PORTC |= (1 << PC5)
|
6 | #define LED1 PORTC |= (1 << PC4)
|
7 | #define LED2 PORTC |= (1 << PC3)
|
8 | #define LED3 PORTC |= (1 << PC2)
|
9 | #define LED4 PORTC |= (1 << PC1)
|
10 | #define LED5 PORTC |= (1 << PC0)
|
11 | #define LED6 PORTD |= (1 << PD5)
|
12 | #define LED7 PORTD |= (1 << PD4)
|
13 | #define LED8 PORTC |= (1 << PC5)
|
14 | #define LED9 PORTC |= (1 << PC4)
|
15 | #define LED10 PORTC |= (1 << PC3)
|
16 | #define LED11 PORTC |= (1 << PC2)
|
17 | #define LED12 PORTC |= (1 << PC1)
|
18 | #define LED13 PORTC |= (1 << PC0)
|
19 | |
20 | #define GREEN PORTD |= (1 << PD4)
|
21 | #define RED PORTD |= (1 << PD5)
|
22 | #define ORANGE PORTD |= (1 << PD4); PORTD |= (1 << PD5)
|
23 | |
24 | |
25 | #define CLK1 PORTD |= ((1 << PD6)); _delay_ms(10); PORTD &= ~((1 << PD6))
|
26 | #define CLK2 PORTB |= ((1 << PB0)); _delay_ms(10); PORTB &= ~((1 << PB0))
|
27 | #define CLK3 PORTB |= ((1 << PB1)); _delay_ms(10); PORTB &= ~((1 << PB1))
|
28 | #define CLK4 PORTB |= ((1 << PB2)); _delay_ms(10); PORTB &= ~((1 << PB2))
|
29 | |
30 | #define RESET PORTD &= ~((1 << PD7)); _delay_ms(10); PORTD |= ((1 << PD7))
|
31 | |
32 | #define NULL PORTC = 0x00; PORTD &= ~((1 << PD4)); PORTD &= ~((1 << PD5))
|
33 | |
34 | |
35 | int main (void) { |
36 | |
37 | |
38 | DDRC = 0xff; |
39 | |
40 | DDRD |= ((1 << PD4)); |
41 | DDRD |= ((1 << PD5)); |
42 | |
43 | DDRD |= ((1 << PD7)); |
44 | DDRD |= ((1 << PD6)); |
45 | DDRB |= ((1 << PB1)); |
46 | |
47 | RESET; |
48 | |
49 | int i = 0; |
50 | int y = 0; |
51 | |
52 | while(1) { |
53 | |
54 | |
55 | NULL; |
56 | |
57 | GREEN; |
58 | |
59 | if(i >= 0){LED0;} |
60 | if(i >= 1){LED1;} |
61 | if(i >= 2){LED2;} |
62 | if(i >= 3){LED3;} |
63 | if(i >= 4){LED4;} |
64 | if(i >= 5){LED5;} |
65 | if(i >= 13){ORANGE;} |
66 | |
67 | CLK1; |
68 | |
69 | |
70 | NULL; |
71 | |
72 | if(i >= 6){LED6;} |
73 | if(i >= 7){LED7;} |
74 | if(i >= 8){LED8;} |
75 | if(i >= 9){LED9;} |
76 | if(i >= 10){LED10;} |
77 | if(i >= 11){LED11;} |
78 | if(i >= 12){LED12;} |
79 | if(i >= 13){LED13;} |
80 | |
81 | CLK2; |
82 | |
83 | i++; |
84 | |
85 | |
86 | |
87 | |
88 | NULL; |
89 | |
90 | RED; |
91 | |
92 | if(y >= 0){LED0;} |
93 | if(y >= 1){LED1;} |
94 | if(y >= 2){LED2;} |
95 | if(y >= 3){LED3;} |
96 | if(y >= 4){LED4;} |
97 | if(y >= 5){LED5;} |
98 | if(y >= 13){ORANGE;} |
99 | |
100 | CLK3; |
101 | |
102 | |
103 | NULL; |
104 | |
105 | if(y >= 6){LED6;} |
106 | if(y >= 7){LED7;} |
107 | if(y >= 8){LED8;} |
108 | if(y >= 9){LED9;} |
109 | if(y >= 10){LED10;} |
110 | if(y >= 11){LED11;} |
111 | if(y >= 12){LED12;} |
112 | if(y >= 13){LED13;} |
113 | |
114 | CLK4; |
115 | |
116 | y++; |
117 | |
118 | _delay_ms(100); |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | }
|
126 | |
127 | |
128 | return 0; |
129 | }
|
Nu ja, die Ausgangstreiber des atmega sind sicher gegen kapazitive Belastung, wie sie auf Kabeln auftritt, empfindlicher als Logik-IC's. Deshalb wäre die (lange) Verbindungsleitung besser am Ausgang der -273 untergebracht. Vielleicht sind auch die Strobe-Impulse durch kapazitive Belastung verstümmelt. ( Die Handkapazität vergrößert die Belastung) Da kann die Software weiterhelfen : Wartezeiten (NOP's) zwischen Datenausgabe und Übernahme in die -273 vorsehen usw.
Hallo @Peter 100ms Wartezeit vor dem CLK Signal bringt keine Änderung, genauso eine Verlängerung des High Signals. Die Kabel müssen an dieser Stelle sein, da man die Platinen sonst 1 lagig nicht realisieren könnte. Würde es etwas bringen die Kabel zu kürzen? Was mich wundert ist, dass es an dem 273 nicht funktioniert, an dem keine Brücken am CLK signal sind... InFaIN
> Wohin müssten denn die fehlenden Blockkondensatoren? Jeweils einer möglichst nah an die Vcc und GND-Pins jedes ICs. Du hast für die ganze Schaltung gerade mal 1 vorgesehen (C1). Das kann auf Dauer nicht gutgehen... > #define NULL PORTC = 0x00; PORTD &= ~((1 << PD4)); PORTD &= ~((1 << PD5)) Krass.... Die Konstante NULL ist in C schon definiert mit dem Wert 0 http://home.fhtw-berlin.de/~junghans/cref/SYNTAX/null.html
Hallo wie Lothar Miller schon schrieb: an jeden Chip gehört ein C ca. 100nF. Insbesondere an deine 74273. Deine GND-Leitung ist wahrscheinlich auch etwas knapp bemessen. Ich würde zwischen die Clock und die CLR-Leitungen jeweils eine GND-Leitung setzen.
100nF Kondensatoren habe ich jetzt angelötet..... keine Verbesserung Kabel habe ich gekürzt... keine Verbesserung Code habe ich verbessert... keine Verbesserung Das mit der GND Leitung verstehe ich net.....
Hallo Flachbandkabel ist recht dünn. Der gesamte Strom fließt darüber. Das kann das Potential soweit anheben, das die Pegel nicht mehr stimmen.
Das sind keine Flachbandkabel...... http://www.reichelt.de/?ACTION=3;ARTICLE=14829;PROVID=2402 3A werden dort nie erreicht....;) Ich habe jetzt an den CLK-Pin ein Kabel gelötet und dieses and er Heizung geerdet.... jetzt übernimmt er die Werte, jedoch auch die anderen.....
PROBLEM GELÖST: Alles nur ein Programmierfehler.... Durch das anfängliche rumprobieren habe ich nicht alle CLK Ports als ausgänge definiert.... Also habe ich nur den Pullup ein und ausgeschalten... das würde auch das Verhalten erklären.... Vielen Dank für eure Hilfe!!! InFaIN
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.