Goeiemiddag allen
In een project heb ik 2x8 DIP switches zitten die uitgelezen worden door een ATmega162 microcontroller dmv 74165 schuifregisters.
Schema:
PARLOAD is pin PB4 van de microcontroller. MISO (PB6) en SCK (PB7) zijn uiteraard verbonden met de bijbehorende pinnen op de µC.
Echter krijg ik de schuifregisters niet uitgelezen. Ik heb volgend programmaatje geschreven:
[code=C]
//CPU Klokfrequentie:
#define F_CPU 20000000
//Includes van header files:
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/wdt.h>
char dipswitch1;
char dipswitch2;
char readdipsw(void) {
char SPIData;
//74165 inlezen en teruggeven
//Data in de buffer lezen: Parallel load low (P1)
PORTB &= 0b11101111;
_delay_us(100);
PORTB |= 0b00010000;
_delay_us(100);
SPIData = SPDR;
return SPIData; //spi data register inlezen
}
int main(void) {
DDRC = 0b11111111;
DDRB = 0b10010111;
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
while(1) {
dipswitch1 = readdipsw();
dipswitch2 = readdipsw();
PORTC = dipswitch2;;
_delay_ms(50);
}
}
[/code]
Met de LA zie ik enkel de PARLOAD lijn die 2x na mekaar kort laag gaat. Op SCK en MISO komt er geen beweging. Om te testen heb ik de ISP programmer losgekoppeld.
Weet er iemand wat ik fout doe? Alvast bedankt...
Stijn