mikrocontroller.net

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


Autor: InFaIN (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: karadur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

egal was sonst passiert, da fehlen Blockkondensatoren!!!

Wie lang ist das Verbindungskabel ?

Autor: InFaIN (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:

#include <avr/io.h>         
#include <avr/delay.h>
 

#define LED0 PORTC |= (1 << PC5)
#define LED1 PORTC |= (1 << PC4)
#define LED2 PORTC |= (1 << PC3)
#define LED3 PORTC |= (1 << PC2)
#define LED4 PORTC |= (1 << PC1)
#define LED5 PORTC |= (1 << PC0)
#define LED6 PORTD |= (1 << PD5)
#define LED7 PORTD |= (1 << PD4)
#define LED8 PORTC |= (1 << PC5)
#define LED9 PORTC |= (1 << PC4)
#define LED10 PORTC |= (1 << PC3)
#define LED11 PORTC |= (1 << PC2)
#define LED12 PORTC |= (1 << PC1)
#define LED13 PORTC |= (1 << PC0)

#define GREEN PORTD |= (1 << PD4)
#define RED PORTD |= (1 << PD5)
#define ORANGE PORTD |= (1 << PD4); PORTD |= (1 << PD5)


#define CLK1 PORTD  |= ((1 << PD6)); _delay_ms(10); PORTD  &= ~((1 << PD6))
#define CLK2 PORTB |= ((1 << PB0)); _delay_ms(10); PORTB &= ~((1 << PB0))
#define CLK3 PORTB  |= ((1 << PB1)); _delay_ms(10); PORTB  &= ~((1 << PB1))
#define CLK4 PORTB |= ((1 << PB2)); _delay_ms(10); PORTB &= ~((1 << PB2))

#define RESET PORTD  &= ~((1 << PD7)); _delay_ms(10); PORTD  |= ((1 << PD7))

#define NULL PORTC = 0x00; PORTD  &= ~((1 << PD4)); PORTD  &= ~((1 << PD5))


int main (void) {          
 

  DDRC = 0xff;

  DDRD  |= ((1 << PD4));
  DDRD  |= ((1 << PD5));

  DDRD  |= ((1 << PD7));
  DDRD  |= ((1 << PD6));
  DDRB  |= ((1 << PB1));

  RESET;

  int i = 0;
  int y = 0;
 
   while(1) {  
   
  
  NULL;

  GREEN;
  
     if(i >= 0){LED0;}
     if(i >= 1){LED1;}
     if(i >= 2){LED2;}
     if(i >= 3){LED3;}
     if(i >= 4){LED4;}
     if(i >= 5){LED5;}
  if(i >= 13){ORANGE;}

  CLK1;


  NULL;

  if(i >= 6){LED6;}
  if(i >= 7){LED7;}
  if(i >= 8){LED8;}
  if(i >= 9){LED9;}
  if(i >= 10){LED10;}
  if(i >= 11){LED11;}
  if(i >= 12){LED12;}
  if(i >= 13){LED13;}

  CLK2;

  i++;




  NULL;

  RED;
  
     if(y >= 0){LED0;}
     if(y >= 1){LED1;}
     if(y >= 2){LED2;}
     if(y >= 3){LED3;}
     if(y >= 4){LED4;}
     if(y >= 5){LED5;}
  if(y >= 13){ORANGE;}

  CLK3;


  NULL;

  if(y >= 6){LED6;}
  if(y >= 7){LED7;}
  if(y >= 8){LED8;}
  if(y >= 9){LED9;}
  if(y >= 10){LED10;}
  if(y >= 11){LED11;}
  if(y >= 12){LED12;}
  if(y >= 13){LED13;}

  CLK4;

  y++;

  _delay_ms(100);
   
   
   
   
   

   }                         
 
  
   return 0;                 
}


Autor: Peter R. (pnu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: InFaIN (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: karadur (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: InFaIN (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.....

Autor: karadur (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: InFaIN (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.....

Autor: InFaIN (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.