Schiftregister an beliebigen Port

OP #2393825
Lesenswert?

Hallo,

ich bin noch neu und kann mit "Suchen" nicht finden, um mein Problem zu 
lösen.

Ich möchte mit einem Atmega16 auf dem PortB an den Pins 1, 2 und 3 
(siehe Proggi im Anhang) einen 74HC595 als Schiftregister ansprechen. In 
der Simulation des GCC zeigt er aber auf PINB1 allerdings keine 
Reaktion. Kann jemand helfen??

hier mein Programm:

#define F_CPU 3686000  //für delay

#include <avr/io.h>
#include <util/delay.h>


unsigned char LED_Ge = 0b10101010;    //Variable für LED's gerade
unsigned char LED_Ab = 0b01010101;    //Variable für LED's abbiegen

#define SER   PINB1  //Daten
#define SC     PINB2  //ShiftClock
#define LC     PINB3  //LatchClock


// Funktionen definieren

void init (void);

void LED (void);


// MAIN Funktion
int main(void)
{


  init();

  while(1 == 1)
  {
    LED();
  }


}

void init (void)
{
  DDRC = 0xff; //PortC als Ausgang für WeichenGeradeaus
  DDRA = 0xff; //PortA als Ausgang für WeichenAbbiegen
  DDRD = 0x00; //portD als Eingang für Taste 1 bis Taste 8
  DDRB = 0b11111110; //PortB0 als Eingang für Taste 9, Rest als Ausgang 
für Schieberegister LED's
  PORTD = 0xff; //PullUp für PortD aktiv für Tastereingänge
  PORTB = 0b00000001; // PullUp für Pin 7
}


//*********************** LED's ausgeben *************************

void LED (void)
{
  char i;
  unsigned char Maske_LED = 0b00000001;

  for ( i = 0; i < 8; i++)
  {
    // Datenausgabe für GE
    if ( (LED_Ge & Maske_LED) == Maske_LED)
    {
      PINB |= (1<<SER);

    }
    else
    {
      PINB &= ~(1<<SER);
    }


    // Shift clock data
    PINB |= (1<<SC);
    _delay_ms(3);
    PINB &= ~(1<<SC);
    _delay_ms(3);



    // Datenausgabe für AB
    if ( (LED_Ab & Maske_LED) == Maske_LED)
    {
      PINB |= (1<<SER);
    }
    else
    {
      PINB &= ~(1<<SER);
    }

    // Shift clock data
    PINB |= (1<<SC);
    _delay_ms(3);
    PINB &= ~(1<<SC);
    _delay_ms(3);

    // Shift Mask
    Maske_LED = Maske_LED << 1;
  }

  // Latch Clock
  PINB |= (1<<LC);
  _delay_ms(3);
  PINB &= ~(1<<LC);
  _delay_ms(3);

}


Viele Grüße,
Kai

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren