Forum: Mikrocontroller und Digitale Elektronik Problem mit Schieberegister


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von warumname (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
nachdem ich mir die Anleitung im Forum durchgelesen habe, hab ich mich 
vorhin mal an ein Schieberegister gewagt.

Leider blinken die angeschlossen Leds nur wild. Eigentlich sollten zwei 
der vier angeschlossenen Leds leuchten und zwei nicht.

Hier der Code:
1
#define F_CPU 16000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
#define SCK  PB1
7
#define RCK PB2
8
#define SER  PB3
9
10
11
int p_RCK (void)
12
{
13
  PORTB &= ~(1<<RCK);
14
  PORTB |=  (1<<RCK);
15
  _delay_us(1);
16
  PORTB &= ~(1<<RCK);
17
}
18
19
int p_SCK (void)
20
{
21
  PORTB &= ~(1<<SCK);
22
  PORTB |=  (1<<SCK);
23
  _delay_us(1);
24
  PORTB &= ~(1<<SCK);
25
}
26
27
int s_SER (bool x)
28
{
29
  if (x==0)
30
  {
31
    PORTB &= ~(1<<SER);
32
  }
33
  
34
  if (x==1)
35
  {
36
    PORTB |= (1<<SER);
37
  }
38
}
39
40
int main(void)
41
{
42
  DDRB |=(1<<SCK);
43
  DDRB |=(1<<RCK);
44
  DDRB |=(1<<SER);
45
  
46
    
47
    while (1) 
48
    {
49
    s_SER(1);
50
    
51
    p_SCK();
52
    p_SCK();
53
    
54
    s_SER(0);
55
    
56
    p_SCK();
57
    p_SCK();
58
    
59
    p_RCK();
60
    
61
    _delay_ms(1000);  
62
    
63
    }
64
}

Des weiteren war ich mir unsicher wie lange der Impuls sein muss.

Über Hilfe würde ich mich sehr freuen.

mfG

von Beo Bachter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
warumname schrieb:
> Eigentlich sollten zwei
> der vier angeschlossenen Leds leuchten und zwei nicht.

Da hast du die Funktionalität eines Schiebregisters noch
nicht verstanden, jedenfalls spiegelt sich dessen Anforderung
nicht wirklich in deinem Code wieder.

Studier nochmal das Datenblat eines Schiebregisters genau,
im Speziellen schaue dir die dargebotenen Daten-Diagramme
an.

von Pascal P. (pionraylz)


Bewertung
0 lesenswert
nicht lesenswert
Ob die Mikrosekunde bei für SCK und RCK ausreicht, sollte aus dem 
Datenblatt des Schieberegisters hervorgehen.
Welches Schieberegister ist es denn?

Ansonsten ist zu vermuten, dass sich durch die aufeinander folgenden 
Schiebeoperationen die HIGH-Bits "verschieben" (und das dann nach RCK zu 
einem Blinken der LEDs führt).

von warumname (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für eure schnellen Antworten

Beo Bachter schrieb:
> Da hast du die Funktionalität eines Schiebregisters noch
> nicht verstanden, jedenfalls spiegelt sich dessen Anforderung
> nicht wirklich in deinem Code wieder.

meinst du damit das ein Schieberegister für eine derartige Aufgabe nicht 
nötig ist? Das ist mir bewusst. Habe es ja auch nur zum testen und 
lernen in Betrieb.

Beo Bachter schrieb:
> Studier nochmal das Datenblat eines Schiebregisters genau,
> im Speziellen schaue dir die dargebotenen Daten-Diagramme
> an.

Danke für den Tipp.

Pascal P. schrieb:
> Ob die Mikrosekunde bei für SCK und RCK ausreicht, sollte aus dem
> Datenblatt des Schieberegisters hervorgehen.

Hab nachgeschaut. Die Zeiten liegen alle im ns Bereich, also deutlich 
unter meiner ms. Danke für den Hinweis.

Pascal P. schrieb:
> Welches Schieberegister ist es denn?

Es handelt sich um ein U74HC595AG der Hersteller ist leider nicht 
erkennbar. Habe bereits versucht den Herauszufinden um das richtige 
Datenblatt zu nehmen.
Aber zu "UTC TCTA" habe ich nix gefunden.

Pascal P. schrieb:
> Ansonsten ist zu vermuten, dass sich durch die aufeinander folgenden
> Schiebeoperationen die HIGH-Bits "verschieben" (und das dann nach RCK zu
> einem Blinken der LEDs führt).

Dann müsste das Flackern doch im us Bereich liegen oder? Bei mir liegt 
das Flackern aber eher im bereich von einigen Herz. Ich werde mal 
versuchen herauszufinden ob es daran liegt. Dazu am besten zwischen die 
einzelnen Schiebeaktionen delays einbauen oder wie würdet ihr da 
vorgehen?

von Pascal P. (pionraylz)


Bewertung
0 lesenswert
nicht lesenswert
> Dann müsste das Flackern doch im us Bereich liegen oder?

Eher im Sekundenbereich (ca. 1), da sich der Zustand ja nur etwa* jede 
Sekunde ändern sollte. Wenn es "einige Hertz" sind, stellt sich die 
Frage nach der CPU-Frequenz. Sind die 16MHz korrekt?

> wie würdet ihr da vorgehen?
Ähnlich wie du, aber zuerst mal einen Reset einbauen (oder immer 8 bit 
reinschieben). Bei jedem anderen Wert als 4 Bit (LED's) würde sich sonst 
der Ausgangswert verschieben...

* Kommentar der Funktion _delay_ms mal anschauen ;-)

von Pascal P. (pionraylz)


Bewertung
0 lesenswert
nicht lesenswert
Was bei dir übrigens fehlt, ist die Setup-Time.

von Dominik (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gemäß main dürfte das maximal einmal blinken, stimmen die Pins?

Gruß Dominik

von Dietrich L. (dietrichl)


Bewertung
-1 lesenswert
nicht lesenswert
Ein Schaltplan und die Angabe über das verwendete Schieberegister wären 
auch nicht schlecht.

von Herbert B. (herbert_b)


Bewertung
0 lesenswert
nicht lesenswert
Dietrich L. schrieb:
> Ein Schaltplan und die Angabe über das verwendete Schieberegister wären
> auch nicht schlecht.

Genau. Deshalb:

warumname schrieb:
> Es handelt sich um ein U74HC595AG der Hersteller ist leider nicht
> erkennbar.

Herbert

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]
  • [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.