logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega8 i vs1001k. Co jest nie tak? Nie działa.

ePeter1234 17 Lut 2009 09:35 1314 2
REKLAMA
  • #1 6161734
    ePeter1234
    Poziom 18  
    Witam!!!

    Znalazęm u siebie w domu układ vs1001k. Chciałem sprawdzić czy jest sprawny i się troszkę nim pobawić. Zrobiłem sobię płytkę według kawałka schematu Yampp'aATmega8 i vs1001k. Co jest nie tak? Nie działa. i napisałem prościutki program do sin testu
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define DD_MOSI 	PINB3
    #define DD_SCK		PINB5
    #define SPI_DDR		PORTB
    
    char vs_data = 0;
    int cs = 0;
    
    void SPI_Init(int cs);
    void SPI_Send(char vs_data);
    char SPI_Read(char vs_data);
    
    int main(void)
    {
    
    DDRD = 0x01;
    PORTD = 0x01;
    PORTD = 0x00;
    
    vs_data = 0x53;
    //SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0xef;
    //SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x6e;
    //SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x95;
    //SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x00;
    //SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x00;
    //SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x00;
    //SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x00;
    //SPI_Init(0);
    SPI_Send(vs_data);
    
    /*_delay_ms(2000);
    
    vs_data = 0x45;
    SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x78;
    SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x69;
    SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x74;
    SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x00;
    SPI_Init(0);
    SPI_Send(vs_data);
    vs_data = 0x00;
    SPI_Init(0);
    SPI_Send(vs_data);
    */
    return 0;
    }
    
    void SPI_Init(int cs)
    {
    //Set MOSI and SCK output, all others input
    SPI_DDR = (1<<DD_MOSI)|(1<<DD_SCK);
    //Enable SPI, Master, set clock rate fck/16
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
    //Wybór urządzenia odbierającego dane
    PORTD = (0<<cs);
    }
    
    void SPI_Send(char vs_data)
    {
    /* Start transmission */
    SPDR = vs_data;
    /* Wait for transmission complete */
    while(!(SPSR & (1<<SPIF)));
    PORTD = (1<<cs);
    }
    
    char SPI_Read(char vs_data)
    {
    /* Start transmission */
    SPDR = vs_data;
    /* Wait for transmission complete */
    while(!(SPSR & (1<<SPIF)));
    return SPDR;
    }


    Po złożeniu wszystkiego do kupy i wgraniu programu do procka w słuchawkach słyszę tylko bzyczenie. Gdy podepne słuchawki bezpośrednio do wyjść vs'a w słuchawkach jest cisza. Druga sprawa to taka, że program w czasie symulacji w AVR Studio wysyła po SPI pierwsą wartość 0x53, a gdy wrzuca do rejestru SPDR wartość kolejną 0xef. Wtedy zeruje się SPIF i SPSR i program wisi, bo SPI jest zajętę. Co jest tutaj nie tak??
  • REKLAMA
  • #3 6163759
    ePeter1234
    Poziom 18  
    Nie ma konfig SPI bo inicjajcja SPI znajduje się w podprogramie SPI_Init. SPI już mi się nie wiesza dopisałęm linijkę konfiguracyjną PORTB i zaskoczyło. Jednak nadal nie wiem jak mam wysłać dane do VS'a bo cały czas mam ciszę w głośnikach:(
REKLAMA