Schieberegister SN54HC595 mit Atmel atmega 88 ansteuern

Gast #5116231
Lesenswert?
• ▲
▼
Hallo Zusammen,

seit längerem versuche ich nun schon das Schieberegister SN54HC595 mit 
einem atmega88 anzusteuern. Die zugehörigen Datenblätter findet Ihr im 
Anhang.

Problem: Auch wenn der Taster betätigt wird, brennt die LED nicht.

Details:
 Schaltplan s. Anhang
 Beschreibung: Ein atmega88 steuert über 5 Pins ein Schieberegister an
 dessen Ausgängen Vorwiderstände und LEDs angeschlossen sind.

Programm:

//Vordefinitionen:
#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU = 1000000
#define pin_ein(PORTx,pin) ((PORTx) |= (1<<pin))
#define pin_aus(PORTx,pin) ((PORTx) &= ~(1<<pin))
#define pin_toggeln(PORTx,pin) ((PORTx) ^= (1<<pin))
#define pin_lesen(PINx,pin) ((PINx) & (1<<pin))

int main(void)
{
  //Defintion der Ausgänge:
  DDRC |= (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5);
  /*Definierte Ausgänge:
  PC1 = Reset                /SRCLR
  PC2 = Schiebetakt          SRCLK
  PC3 = Speichertakt         RCLK
  PC4 = Ausgangssteuerung    /OE
  PC5 = Serieller Eingang    SER
  Anmerkung zur Ansteuerung:
        - /OE bleibt Null
        - SER bleibt EINS
        - RESET bleibt EINS
  */
  //Definition der Eingänge:
  DDRB &= ~(1<<PB0);
  //Pull-ups aktivieren:
  PORTB |= (1<<PB0);
  /*Definierte Eingänge:
  PB0 = Taster        T
  */

  //Parameterliste:
  unsigned int zaehler_taster =0;

  pin_aus(PORTC,PC4);// Ausgangssteuerung bleibt aktiv.
  pin_ein(PORTC,PC5);// Seriellen Eingang = 1.
  pin_ein(PORTC,PC1);// SChiftregister nicht reseten.

    while (1)
    {

/* Ziel1: LED soll entsprechend der Tasterbetätigung brennen..
Vorgehen:
1. Abfrage ob Taster betätigt. Wenn Tasterbetätigt  weiter mit 2.
2. Schiebtakt einschalten, d.h. PC2 pin ein.
3. Speichertakt einschalten, d.h. PC3 pin ein
*/
  if(!(pin_lesen(PORTB,PB0)))
  {
          _delay_ms(50);
      if(!(pin_lesen(PORTB,PB0)))
    {
            zaehler_taster++;
      if(zaehler_taster==1)
      {
        pin_ein(PORTC,PC2);//um 1 bit schieben.
        pin_aus(PORTC,PC2);//schieben beenden.
        pin_ein(PORTC,PC3);//speichern beginnen.
              pin_aus(PORTC,PC3);//speichern beenden.
      }
    }

  }
  else
  {
          pin_aus(PORTC,PC2);
    pin_aus(PORTC,PC3);
  }
    }
}

Die Spannungen an den Pins am atmega88 entsprechen dem Programm , z.B. 
/OE = ca. 0V, SER = ca. 3 V.

Die Fuse-Bytes im atmega88 haben folgende Status:
Low Fuse:  01100010
High Fuse: 11011111

Bisherige Schritte:

-Polung aller Bauteile überprüft. -> i.O.
-Überprüfung auf Kurzschlüsse.    -> i.O.
-Software überarbeitet            -> bisher ohne Erfolg/Ergebnis

Vielen Dank im Voraus für eure Hilfe.
Gast #5116442
Lesenswert?
• ▲
▼
Du benutzt einen Pull-Up und der Taster legt VCC auf den Pin. Der Pin 
liegt also immer auf High Pegel.

Kontrolliere erst mal, ob dein Programm auf dem AVR überhaupt si durch 
läuft, wie gedacht. Das macht amn am einfachsten mit einem Debugger. Wer 
keinen Debugger hat, sendet Statusmeldungen über den seriellen Port an 
ein Terminal Programm. Wer das auch nicht hat, schließt LED's an, die 
das Erreichen bestimmter Programmpunkte anzeigen.
Gast #5116876
Lesenswert?
• ▲
▼
Viktor B. schrieb:
> Verdammt, ich verwechsle das immer wieder.

Ja, C ist schon eine super Sprache...
2 Minuten, um den Algorithmus des Programmes zu finden, 5 Minuten, um 
den Quelltext einzugeben und dann 2 Tage, um die syntaktischen Fehler in 
dem Kauderwelsch zu finden.

Einfach und effektiv...
:))

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.