Forum: Mikrocontroller und Digitale Elektronik Frage zum Portexpander 74HCT165


von Markus P. (sebastianwurst)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe folgende Schaltung (Anhang) verdrahtet und den Code (unten) 
benutzt, doch leider wird auf der Seriellen immer nur "11111111" 
ausgegeben auch wenn ich den Schalter drücke. Hat jemand eine Idee was 
ich falsch gemacht haben könnte?

Kleiner Nachtrag: Nachdem ersten übertragen ist das stopbit ja false und 
er schreibt "00000100" auf die serielle schnittstelle. Wenn ich dann 
nochmal schreiben lasse indem ich das stopbit zurücksetze wird immer nur 
"11111111" geschrieben, egal wie der Schalter steht.
1
DDRA    = 0x00000000;
2
PORTA   = 0x11111111; // 1 Pull up aktiv = Eingang 
3
4
DDRC    = 0x11111111:
1
  while(1)
2
  {
3
4
if (stopbit == false)
5
  {
6
  
7
  // Clock im Ruhezustand auf 1 
8
  PORTC |= (1<<PC4);
9
10
  // An PL mal stroben...
11
12
  // PL auf High
13
  PORTC |= (1<<PC5);
14
  // PL auf Low
15
  PORTC &= ~(1<<PC5);
16
  // PL auf High
17
  PORTC |= (1<<PC5);
18
19
  unsigned int m;
20
21
  for(m=1;m<=8;++m)
22
  {
23
  if (PINA & (1<<PINA0)) { // Logisch 1 wenn Schalter nicht gedrückt da Pullup an
24
    usart_write_str("0");
25
  } 
26
  else 
27
  {
28
    usart_write_str("1");
29
  }
30
31
32
  // An Clock mal stroben...
33
34
  // Clock auf High
35
  PORTC |= (1<<PC4);
36
  // Clock auf Low
37
  PORTC &= ~(1<<PC4);
38
  // Clock auf High
39
  PORTC |= (1<<PC4);
40
  }
41
42
 stopbit = true;
43
  }


Das stopbit setze ich dann über die serielle zurück, damit er mir nicht 
zyklisch was auf die Schnittstelle schreibt, sondern nur 1mal.

von Markus P. (sebastianwurst)


Lesenswert?

Hat keiner eine Idee ?

von ... (Gast)


Lesenswert?

Markus P. schrieb:
> DDRA    = 0x00000000;
> PORTA   = 0x11111111; // 1 Pull up aktiv = Eingang
>
> DDRC    = 0x11111111:

Das ist schonmal ziemlich daneben, das kommt so nie durch den Compiler.
1. Binärformat fängt mit 0b an, 0x ist hexadezimal.
2. : statt ;
Deine Portkonfiguration stimmt also nicht. Zumindest PC5/PL ist bei Dir 
ein Eingang statt Ausgang.
Das setzen von DDRA kannst Du Dir eigentllich auch sparen, das ist nach 
einem Reset sowieso 0.

Am Taster/Pin13 fehlt ein PullUp. Die restlichen Eingänge floaten auch, 
ebenfalls keine so gute Idee. Leg die auf definierte Pegel.

von Markus P. (sebastianwurst)


Angehängte Dateien:

Lesenswert?

> Das ist schonmal ziemlich daneben, das kommt so nie durch den Compiler.
> 1. Binärformat fängt mit 0b an, 0x ist hexadezimal.

Stimmt, das war ein Schreibfehler kahm so durch den Compiler 
(Programmers Notepad)

> 2. : statt ;

Nur nen Kopierfehler hier ins Forum, sorry

> Deine Portkonfiguration stimmt also nicht. Zumindest PC5/PL ist bei Dir
> ein Eingang statt Ausgang.

Jetzt sieht es ja so aus:

  DDRC = 0b11111111;

Somit ist  der ganze PortC, also auch PL, ein Ausgang.


> Das setzen von DDRA kannst Du Dir eigentllich auch sparen, das ist nach
> einem Reset sowieso 0.
>
> Am Taster/Pin13 fehlt ein PullUp. Die restlichen Eingänge floaten auch,
> ebenfalls keine so gute Idee. Leg die auf definierte Pegel.


Ich benutze doch die internen PullUps, aktiviert durch
PORTA   = 0b11111111; // 1 Pull up aktiv = Eingang

und halte mich an das Beispiel(s.Anhang) ist das trotzdem falsch ?

von Seltener Gast (Gast)


Lesenswert?

Markus P. schrieb:

> Ich benutze doch die internen PullUps

Es geht um die Eingänge des 74HCT165, und der hat keine internen 
Pullup-Widerstände. Daher gehören dort externe hin (bzw. sind unbenutzte 
Eingänge fix an VCC oder GND zu legen).

von Muprhy (Gast)


Lesenswert?

Hi,

Pullup daher:

Du hast generell den Eingang als PullUp gezeichnet und ohne 
Tasterbetätigung = High im AVR hinterlegt. Möchtest du aber den Zustand 
wechseln (Taster gedrückt!) so mußt du einen "sauberen" Low-Pegel mit 
10k gegen Masse legen.

von Markus P. (sebastianwurst)


Lesenswert?

Seltener Gast schrieb:
> Es geht um die Eingänge des 74HCT165, und der hat keine internen
> Pullup-Widerstände. Daher gehören dort externe hin (bzw. sind unbenutzte
> Eingänge fix an VCC oder GND zu legen)

Da ist der Kanckpunkt, denkfehler von mir, vielen Dank ich glaube das 
war es.....
Danke an Murphy auch !!!! Super....

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.