Frage zum Portexpander 74HCT165

OP #2265139
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.
Angehängte Dateien:
Gast #2265557
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.
OP #2265602
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 ?
Angehängte Dateien:
Gast #2265609
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.