Forum: Compiler & IDEs Schiftregister an beliebigen Port


von Kai E. (ice6man)


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

von Andreas W. (geier99)


Lesenswert?

Hallo,

Du hast wohl PINB mit PORTB verwechselt.

Gruss Andi

von Kai E. (ice6man)


Lesenswert?

Hallo Andi,

jo - das war's - nu geht es

vielen Dank!

Kai

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.