Beste mensen
Is er iemand die een programma in C hebt geschreven die het schuifregister telkens 1 led opschuift van links naar rechts of anders om,de led moet dan ook blijven branden
Heb ik daar een timer voor nodig of kan ik de interne clock gebruiken van de ATMEGA16
Ik gebruik de 74HCT4094 schuif register.
Ik gebruik het boek AVR hardware en C programmering in de praktijk, alleen dat boek gebruik een 5x7 matrix display.
Ik hoop dat iemand een geschreven programma in C hebt,zodat ik er wat van kan opsteken.
Vast bedankt.
WilToyo
Maak me niet gek, ik ben al gek.
Weet je hoe je het schuifregister aan moet sturen. Zo ja, IO pin van de avr aan clock van de 4094 en de data input aan VCC.
Zodra je de IO pin hoog maakt wordt het schuifregister met 1 opgehoogd. Schuifregister hoef op deze manier niet van een clcok te voorzien.
[Bericht gewijzigd door WilToyo op (14%)]
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Misschien ben je hier wat mee:
// Aanpassen!
#define LCD_PORT PORTC
#define LCD_DDR DDRC
#define LCD_DATA_PIN (1 << PC1)
#define LCD_CLK_PIN (1 << PC2)
#define LCD_LATCH_PIN (1 << PC3)
void init_schuifregister(void)
{
LCD_DDR |= LCD_DATA_PIN | LCD_CLK_PIN | LCD_LATCH_PIN;
}
void data2schuifregister(char d)
{
char bitteller;
// CLK en LATCH laag maken
LCD_PORT &= ~(LCD_CLK_PIN | LCD_LATCH_PIN);
for (bitteller = 0; bitteller < 8; bitteller++) {
if ((d & 1) == 1) { // bit0 = hoog?
LCD_PORT |= LCD_DATA_PIN; // DATA-pin hoog maken
} else { // bit0 = laag
LCD_PORT &= ~LCD_DATA_PIN; // DATA-pin laag maken
}
LCD_PORT |= LCD_CLK_PIN; // CLK hoog
d = (d >> 1); // bits opschuiven
LCD_PORT &= ~LCD_CLK_PIN; // CLK terug laag
}
LCD_PORT |= LCD_LATCH_PIN; // LATCH hoog
}
Vergeet niet de definities aan te passen.
De init-routine moet je maar 1 keer aanroepen.
[Edit]
Stommiteit in code aangepast.
hoi pros
Allereerst dankje voor het programma.
Ik heb even een vraagje waar moet ik de latch op aan sluiten bij de schuifregister 74 hct 4094
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Op de STROBE-ingang.
Die verdomde IC-ontwerpers bedenken alsmaar nieuwe namen voor dezelfde pin-functie. Het lijkt wel een samenzwering... 
Oke dankje
Ik heb alleen de leds aan gesloten op PB0 t/m6 moet ik die in het programma op hoog zetten bv DDRB=0xff
[Bericht gewijzigd door Henry S. op (51%)]
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Ik heb alleen de leds aan gesloten op PB0 t/m6 moet ik die in het programma op hoog zetten bv DDRB=0xff
Als je LED's rechtstreeks aan de AVR wil knopen, moet je eerst die pinnen als uitgang instellen (DDRB=0xff) en kan ze vervolgens allemaal laten oplichten met "PORTB = 0xFF".
Het verband met dat schuifregister ontgaat me hier enigzins...
De bedoeling is om de schuifregister het werk te laten doen om de leds van 1 aan opschijven naar 2de led etc...
De outputs van de schijf register gaan die naar de + van de led en dan de - van de led aan ground
[Bericht gewijzigd door Henry S. op (45%)]
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Als het schuifregister op PORTB aangesloten is, hoef je enkel deze define's aan te passen:
#define LCD_PORT PORTC
#define LCD_DDR DDRC
#define LCD_DATA_PIN (1 << PC1)
#define LCD_CLK_PIN (1 << PC2)
#define LCD_LATCH_PIN (1 << PC3)
[Edit]
Ook hier domme fout verbetert.
[Bericht gewijzigd door pros op (11%)]
Dankje wel PROS
Ik heb het voor elkaar het werkt alleen ik heb 1 vraagje als ik met mijn vinger me test board aan raakt dan doet de schuifregister het en als ik even wacht loop hij het programma af en stopt hij, zodra ik weer met mijn vinger het test board aan raak begint het weer te werken heb dat met aarde te maken hoe kan ik dat oplossen
[Bericht gewijzigd door Henry S. op (38%)]
Door ze aan de voeding of aan de massa te leggen, zie datasheet.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Hallo pros
Dankje het probleem is op gelost.
En verder iedereen bedankt ik heb weer een hoop geleerd
Groetjes klompie