Gast
#1993444
Hallo ich bin neu hier und hab gleich mal eine Frage ;)
ich kenn mich mit microcontrollern und der Programmiersprache C nicht
wirklich gut aus. Aber würde mein Programm so arbeiten wie ich will?
Ich möchte lediglich ein Schieberegister über zwei Ports ansteuern und
ein Byte reinschieben. Für die leute hier sicherlich keine große sache
aber da ich noch am Anfang steh schon nicht ganz einfach ;)
Am Ende sollte dann ein 8 Kanal Lauflicht rauskommen, klar das das ganze
einfachr gehn würde aber mir geht es jez erst mal um das Verständnis von
Schieberegistern :)
*********************************************************************
#include <avr/io.h>
#define F_CPU 8000000UL //CPU Takt = 8MHz
#define SR_DDR DDRB //DDRB als SR_DDR definieren
#define SR_PORT PORTB //PORTB als SR_PORT definieren
#define SR_0 PB0 //PB0 als SR_0 definieren (Clock)
#define SR_1 PB1 //PB1 als SR_1 definieren (Data)
#define Sprchr 8 //8 Speicher für Schieberegister
volatile uint8_t memory[Sprchr]; //8 Speicher für Schieberegister
void set_memory (uint8_t i) //Unterprogramm Daten ins SR schieben
{
uint8_t j;
for(j=7; j>=0; j--) //8 Bit ins SR schieben
{
if((memory[i]>>j) & 1) //Bits jeweils mit 1 verunden
SR_PORT |= (1<<SR_1); //wenn Bit=1 SR_1 auf HIGH
else
SR_PORT &= ~(1<<SR_1); // wenn Bit=0 SR_1 auf LOW
SR_PORT |= (1<<SR_0); //HIGH Flanke => schieben
SR_PORT &= ~(1<<SR_0); //LOW
}
}
int main (void)
{
SR_DDR=0xFF; //SR_PORT auf Ausgang und LOW
SR_PORT=0x00;
uint8_t n=0;
memory[0] = 0b00000001;
memory[1] = 0b00000010;
memory[2] = 0b00000100;
memory[3] = 0b00001000;
memory[4] = 0b00010000;
memory[5] = 0b00100000;
memory[6] = 0b01000000;
memory[7] = 0b10000000;
while(1)
set_memory(n);
n++;
if(n==7)
n=0;
}
*********************************************************************
Wär nett wenn mal jemand drüber schaun könnte und mir Fehler aufdecken
könnte. Ich hoff das nichts dabei ist, wo ich ausgelacht werde :D Hab
mir auch gleich ein paar Schieberegister bestellt, damit ich das ganze
jetzt noch in meinem Urlaub ausprobieren kann.
Danke schonmal :)
Hammersn