Forum: Mikrocontroller und Digitale Elektronik Arduino un Schieberegister


von Gundelputz (Gast)


Angehängte Dateien:

Lesenswert?

hallo zusammen ,
hier ist er wieder. Euer verirter Neuling.
habe heute den ganzent Tag damit verbracht eine einfache Schaltung mit 
einem CD4094 und 8LED zum laufen zu bringen. Es sollen nacheinander 
alles LED's an den Ausgängen zum leuchten gebracuht werden und einmal 
alle an und eimal alle aus. Nach langen suchen im WEB bin ich auf ein 
vielversprechendes Sketch gestossen:
https://entwickler.de/online/development/arduino-iot-dummies-124603.html
cih habe lediglich die function loop wie folgt angepasst:

void loop()
{
  // put your main code here, to run repeatedly:
int i;
 for( int i = 11; i > 0; i--)
 {
  switch(i)
  {
  case 1:
  datenwort=B10000000;
  break;
  case 2:
  datenwort=B01000000;
  break;
  case 3:
  datenwort=B00100000;
  break;
  case 4:
  datenwort=B00010000;
  break;
  case 5:
  datenwort=B00001000;
  break;
  case 6:
  datenwort=B00000100;
  break;
  case 7:
  datenwort=B00000010;
  break;
  case8:
  datenwort=B00000001;
  break;
  case 9:
  datenwort=B00000000;
  break;
  case 10:
  datenwort=B11111111;
  break;

 }
 delay(1000);
 }

}

Ich bekommen folgenden Ablauf als ausgabe:

       Q1   Q2   Q3   Q4   Q5   Q6   Q7   Q8
10     H    H    H    H    H    H    H    H
9      L    L    L    L    L    L    L    L
8      L    L    L    L    L    L    L    L
7      L    L    L    L    H    L    L    L
6      L    L    L    H    L    L    L    L
5      L    L    H    L    L    L    L    L
4      L    H    L    L    L    L    L    L
3      H    L    L    L    L    L    L    H
2      L    L    L    L    L    L    H    L
1      L    L    L    L    L    L    L    L

man beachte das Q6 nur in der ersten Reihe H ist und in Reihe 8 Q1 und 
Q8 H haben.
Kann sich da jemand einen reim drauf machen?

von Falk B. (falk)


Lesenswert?

@ Gundelputz (Gast)

>    SP6.JPG

Deine LEDs sind verpolt.

>alle an und eimal alle aus. Nach langen suchen im WEB bin ich auf ein
>vielversprechendes Sketch gestossen:

WOW, dafür muss man sooo lange suchen, anstatt mal ein paar Minuten 
selber zu denken?

>man beachte das Q6 nur in der ersten Reihe H ist und in Reihe 8 Q1 und
>Q8 H haben.

Ja und?

>Kann sich da jemand einen reim drauf machen?

Wo liegt das Problem. Das hast DU doch ins Programm geschrieben! Ach 
nee, du hast nur kopiert aber das "Sektch" nicht eine Sekunde KAPIERT! 
:-(

von Walter S. (avatar)


Lesenswert?

das Programm ist keines, es wird sich zum einen nicht compilieren lassen
(wo ist z.B. B11111111 definiert?),
zum anderen macht es auch rein gar nichts was eine LED zum Leuchten 
bringen würde!

von Helldriver (Gast)


Lesenswert?

Wenn hier jemand Hilfe sucht während es schön wenn er oder sie Antworten 
bekommt und nicht irgend einen nichtssagende Kommentar.
Ihr habt alles erhalten um zu Antworten. Würde sich das Programm nicht 
kompilieren lassen wurde auch kenne Ausgabe erscheinen.

von ZweiSchere (Gast)


Lesenswert?

Der Freitag fängt diese Woche wieder mal früh an :-)

von Gundelputz (Gast)


Lesenswert?

Falk B. schrieb:
> Deine LEDs sind verpolt.

Danke
ist aber nur in der Darstellung so. Hab mich da vertan.

Falk B. schrieb:
> Ja und?

Ja und was?

Falk B. schrieb:
> Wo liegt das Problem. Das hast DU doch ins Programm geschrieben! Ach

an welcher stelle habe ich in der funktion geschrieben das zwei LED's 
leuchten sollen?

> nee, du hast nur kopiert aber das "Sektch" nicht eine Sekunde KAPIERT!
> :-(

Es ist schon sehr herrablassend zu behaupten ich hätte alles nur kopiert 
und zu dem keine Ahnung was da im Programm vorgeht.
Ich lasse mich für diesen einen Moment mal auf dein Niveau herrab und 
möchte dir sagen das ich glaube du hast die Frage nicht verstanden und 
nur die Hälfte gelesen. Ich bin in einigen Foren unterwegs und es gibt 
immer User die nicht im Stande sind einen konstruktiven Beitrag zu 
leisten. Mein anliegen ist es zu verstehen was passiert und dazu bediene 
ich mich auch gerne mal einer vorhandenen Routine. Wenn sie gut ist dann 
gilt mein Lob und Dank dem Entwickler andernfalls wird sie angepasst 
oder verworfen.
Hast du schon mal davon gehört das man das Rad nicht neu erfinden muss.

Walter S. schrieb:
> das Programm ist keines, es wird sich zum einen nicht compilieren lassen
> (wo ist z.B. B11111111 definiert?),
> zum anderen macht es auch rein gar nichts was eine LED zum Leuchten
> bringen würde!

Auch du hast offensichtlich nicht richtig gelesen.
Gundelputz schrieb:
> habe lediglich die function loop wie folgt angepasst:
Ich kann ohe Probleme das Programm in den Arduino Uno übertragen.
hier noch mal der ganze Code:

#include "TimerOne.h"
#define sclockPin 1
// dataPin is owned by system
#define sdataPin 2
#define sstrobePin 3

byte datenwort;
bool mussSenden;
byte sendeGerade;

int i;


void setup() {
  // put your setup code here, to run once:
  Timer1.initialize(1500); // 2 KhZ Arbeitstakt
  Timer1.attachInterrupt(intSr);
  sendeGerade=0;
  mussSenden=0;
  datenwort=B11111111;

  pinMode(sclockPin, OUTPUT);
  pinMode(sdataPin, OUTPUT);
  pinMode(sstrobePin, OUTPUT);
}

void intSr()
{
  digitalWrite(sstrobePin, LOW);
  if(mussSenden==1)
  {
    if(sendeGerade==7)
    {// Strobe senden, resetten
      digitalWrite(sstrobePin, HIGH);
      sendeGerade=0;
    }
    digitalWrite(sclockPin, LOW);
    mussSenden=0;
  }
  else
  {// Sende Nutzdaten
    digitalWrite(sclockPin, HIGH);
    mussSenden=1;
    // Ermittle Daten
    byte mySendBit=datenwort&(1<<sendeGerade);
    if(mySendBit==0)
      digitalWrite(sdataPin, LOW);
    else
      digitalWrite(sdataPin, HIGH);

    sendeGerade++;
  }
}

void loop()
{
  // put your main code here, to run repeatedly:
int i;
 for( int i = 11; i > 0; i--)
 {
  switch(i)
  {
  case 1:
  datenwort=B10000000;
  break;
  case 2:
  datenwort=B01000000;
  break;
  case 3:
  datenwort=B00100000;
  break;
  case 4:
  datenwort=B00010000;
  break;
  case 5:
  datenwort=B00001000;
  break;
  case 6:
  datenwort=B00000100;
  break;
  case 7:
  datenwort=B00000010;
  break;
  case8:
  datenwort=B00000001;
  break;
  case 9:
  datenwort=B00000000;
  break;
  case 10:
  datenwort=B11111111;
  break;
 }
 delay(1000);
 }
}


aber zurück zu meiner eigendlichen Fragestellung. Ich vermute das bei 
der Übertragung zwei Bits vorran gestellt werden Was evtl. auf ein 
Paritätsbit hinweisen könnte. ich finde in dem Sketch und im TimerOne.h 
keinen hinweis hierfür.
Ich habe das ganze mal mit Tastern nachgestellt(Bit für Bit) ohne 
Arduino und da funktioniert es ohne Probleme. Somit möchte ich dne 
CD4094 weitestgehenst ausschliessen. Eine verringerung des Taktes hat 
auch nichts gebracht.
Hat noch irgend wer eine Idee?

von Gundelputz (Gast)


Lesenswert?

hier noch mal als "Beweis" das ich nicht ganz so inkompetent bin wie 
oben dargestellt ein winziges Sketch(ohne Fremde Hilfe) das genau das 
macht was es soll.

int freigabe1 = 11;
int tackt1 = 12;
int bit1 = 13;

void setup() {
  // put your setup code here, to run once:

  pinMode(freigabe1,OUTPUT);
  pinMode(tackt1,OUTPUT);
  pinMode(bit1,OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  for(int i = 10; i >0; i--)
  {
      digitalWrite(tackt1,LOW);
      digitalWrite(freigabe1,LOW);
      digitalWrite(bit1,LOW);
      digitalWrite(tackt1,HIGH);
  }
  for(int l = 4; l >0; l--)
  {
    digitalWrite(tackt1,LOW);
    digitalWrite(freigabe1,HIGH);
    digitalWrite(bit1,HIGH);
    digitalWrite(tackt1,HIGH);
    delay(1000);
    digitalWrite(tackt1,LOW);
    digitalWrite(freigabe1,HIGH);
    digitalWrite(bit1,LOW);
    digitalWrite(tackt1,HIGH);
    delay(1000);
  }
}

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.