www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 74HC595 und ATtiny13 Lauflicht


Autor: Carsten Born (corvulus)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe eine Schaltung mit einem ATtiny13, 2x 74HC595, zwei Darlington 
Arrays und 16LEDs aufgebaut. Die LEDs sollen als Lauflicht fungieren.
Mein einziges Problem ist, dass immer wenn das erste Bit im 
Schieberegister leuchten soll (Ausgang Q0 bzw. QA (je nach hersteller)), 
dann leuchten alle LEDs an diesem Schieberegister.
Die Software sollte in Ordung sein. Ich habe zur Fehlereingrenzung 
einfach statt vorher nun einem nun ein zweites Schieberegister 
verwendet, da ich dachte, ich hätte einen Fehler in der 
Schleifenbedingung (oder dergleichen), denke aber, dass ich dies nun 
ausgrenzen kann, da auch das mittlere (also 9.) Bit den gleichen Fehler 
beim zweiten Schieberegister hervorruft.

Hier der QT:
#include <avr/io.h>
#include <util/delay.h>

void my_delay(uint16_t ms)
{
  for(uint16_t t=0; t<=ms; t++)
    _delay_ms(1);
}

void setPin(int pin, uint16_t state)
{
  if(state)
  {
    PORTB |= (1<<pin); 
  }
  else
  {
    PORTB &= ~(1<<pin);
  }
}
 
int main (void)
{
  DDRB  = 0b11111111;
  PORTB = 0x00;

  while(1)
  {
    for(uint16_t i=0; i<=15; i++)
    {
      for(uint16_t k=0; k<=15; k++)
      {
        setPin(PB0, (k==i ? 1 : 0) );
        setPin(PB1, 1);
        setPin(PB1, 0); //shift
      }
      setPin(PB2, 1);
      setPin(PB2, 0); //save

      my_delay(300);
    }
  //  my_delay(2000);
  }
  return 0;
}

Youtube Video: Youtube-Video "V260111_22.08.3gp"

Ich hoffe, ich habe alle nötigen Informationen mitgegeben.
Dake schoneinmal für eure Mühen.

Grüße Carsten

Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Takst du richtig? Werden die Daten bei steigender oder fallender Flanke 
übernommen?

Schaltplan wär auch nett.

Siehe auch AVR-Tutorial: Schieberegister

Autor: Carsten Born (corvulus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert doch wie gewünscht, daher nehme ich an, dass die taktung 
stimmen muss. Die Beschaltung ist genauso, wie in dem verlinkten 
Tutorial.
Übernommen wird bei ansteigender Flanke.
Das einzige Problem ist halt, dass wenn das 1. Bit des Registers 
leuchtet, alle LEDs an dem Register leuchten.
Einen genauen Schaltplan kann ich frühestens morgen geben, da ich nicht 
zu Hause bin.
Was soltle beim takten denn falsch gemacht werden? Ich takte doch so 
oder si mit beiden Flanken ein Mal an gleicher Stelle...

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutung: Du hast Leitungen vertauscht, eventuell Save und 
Datenleitung.

Autor: Carsten Born (corvulus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und warum funktioniert es dann sonst richtig? Das wäre dann doch ein 
sehr großer Zufall, den ich mir auch, wenn ich mir den QT ansehe nicht 
im geringsten erklären kann. Immerhin müsste sich in dem Fall auch nur 
eine Veränderung alle 16*200ms, also 3,2s einstellen. 14 von 16 LEDs 
leuchten ja zur richtigen Zeit am richtigen Ort... grübel

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreibe Dein Programm so um, dass 2 LEDs durchlaufen. Dann wirst Du es 
sehen.

Autor: Carsten Born (corvulus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm. Klingt nach einer guten Idee. Werde ich morgen einmal testen.
Hat sonst noch jemand weitere Debuggingvorschläge?

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuerst mit Durchgangsprüfer die Verbindungen prüfen.

Viel Erfolg,
chris

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Carsten,

wie geht's dem Lauflicht?

Autor: Carsten Born (corvulus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sodele. Das ERgebnis ist: Die beiden Darlington Arrays waren falsch 
herum eingesteckt... GND lag an Q0/QA an. Faszinierend, dass sie dennoch 
so gut funktionierten... Die Schaltung funktioniert nun vollständig und 
korrekt.
Es konnte eigentlich nurnoch an diesen beiden liegen, da die Beschaltung 
der restlichen Hardware und die Software richtig sein mussten 
(Überprüfung der Geschwindigkeit mit der Delay-Zeit usw.).
Vielen Dank für die Hilfen und Mühen!

Grüße Carsten

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstaunlich, dass sich daraus der oben genannte Effekt ergab. Wie bist 
Du auf die Lösung gekommen?

Autor: Carsten Born (corvulus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdenken. ;-) Dem Fehler logisch auf die Schliche kommen. Das 
Schieberegister hat ja soweit funktioniert, dass hätte es auf keinen 
Fall, wenn eine Leitung vertauscht gewesen wäre. Ich habe dann einfach 
noch einmal das Datenblatt vom Darlington-Array genommen und auf Anhieb 
den Fehler festgestellt.
Der Effekt ergibt sich dadurch, dass, wenn Qo=0 ist, der Ausgang auf GND 
liegt und der Array dadurch "normal" beschaltet ist. Wenn er nun High 
wird, dann liegt die Masse vom Array auf +5V an. Scheinbar schalten dann 
alle Transistoren irgendwie durch... Müsste man sich näher mal ansehen, 
aber nun werde ich ersteinmal lieber den ATTiny13 durch den ATTiny2313 
ersetzen und dann möchte ich eine serielle Schnittstelle und 4 PWM 
Ausgänge zum Laufen bekommen. ;-)

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdenken kann man, hilft aber oft nicht weiter, weil sich die Fehler 
manchmal außerhalb des Gedankenmodells befinden.

Deshalb empfehle ich probieren+nachdenken.

Autor: Carsten Born (corvulus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So habe ich es ja gemacht. ;-)

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.