Forum: Mikrocontroller und Digitale Elektronik Probleme mit 74HC273 als Porterweiterung


von InFaIN (Gast)


Angehängte Dateien:

Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von karadur (Gast)


Lesenswert?

Hallo

egal was sonst passiert, da fehlen Blockkondensatoren!!!

Wie lang ist das Verbindungskabel ?

von InFaIN (Gast)


Angehängte Dateien:

Lesenswert?

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
}

von Peter R. (pnu)


Lesenswert?

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.

von InFaIN (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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

von karadur (Gast)


Lesenswert?

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.

von InFaIN (Gast)


Lesenswert?

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.....

von karadur (Gast)


Lesenswert?

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.

von InFaIN (Gast)


Lesenswert?

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.....

von InFaIN (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.