Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Показано с 1 по 8 из 8

Тема: Attiny2313 через SPI на Atmega8, help

  1. #1

    Attiny2313 через SPI на Atmega8, help

    уже 2ю неделю пытаюсь разобраться, как используя SPI перекинуть хотя бы байт с 2313 (Мастер) на атмегу8 ?
    даташит читал, гуглил..находил примеры перекладки кода на асме из даташита в код С.
    ничего не помогает..и я даже понять не могу.. толи 2313 не передает толи атмега8 и не пытается что либо принять.
    Используется 3х-проводка.
    Если кто разбирался с SPI у 2313 подскажите на что обратить внимание, где подводные камни.
    Мне еще не ясно, в CodeVision в генераторе проекта, если у атмега8 выбрать настройку SPI, там еще и частоту передачи нужно выбрать, отчего меняется код инициализации атмеги8..но я что-то никак понять не могу смысла выбора частоты..ведь тактируется все мастером.. зачем же выбирать частоту то?!


  2. #2
    Аватар для Tadas
    Регистрация
    12.06.2002
    Адрес
    KO24AV
    Сообщений
    3,356
    Позывной
    LY1CE
    А Вы ногу SS в меге8 заземляете ?
    Без этого она конечно ничего принимать не будет.
    Ну а частота передачи задается только для мастера, однако тут надо учитывать тактовую частоту слейва, чтобы не превысить его возможности.
    Пример инициализации слейва можете посмотреть на стр. 125 дейташита мега8, или на стр. 130 мега8А.
    Хороша теория, но что ты с ней будешь делать ?
    73 de LY1CE

  3. #3
    пробовал и на землю и на + толку нет.
    Вот код на 2313 (Мастер), взято - http://forum.sources.ru/index.php?showtopic=295450&hl=
    (переложено с Асм на С из даташита)
    Код:
    void SendSPIByte(unsigned char byte)
    {
        //USI Control Register - USICR
        //Bit 7   - USISIE   - Start Condition Interrupt Enable
        //Bit 6   - USIOIE   - Counter Overflow Interrupt Enable
        //Bit 5-4 - USIWM1:0 - Wire Mode
        //Bit 3-2 - USICS1:0 - Clock Source Select
        //Bit 1   - USICLK   - Clock Strobe
        //Bit 0   - USITC    - Toggle Clock Port Pin    
        USICR=0b00010010;
            
        //USI Status Register - USISR
        //Bit 7   - USISIF    - Start Condition Interrupt Flag
        //Bit 6   - USIOIF    - Counter Overflow Interrupt Flag
        //Bit 5   - USIPF     - Stop Condition Flag
        //Bit 4   - USIDC     - Data Output Condition
        //Bit 3-0 - USICNT3:0 - Counter Value
        USISR = 0b00000000;
     
        USIDR = byte;  
        
        for (int i = 0; i<16; i++)
    	{ 
    		USICR = (i%2 == 0) ? ch16 : ch17;
    		_delay_us(10);
    
    
    	}
    
    }
    
    main()
    {
      ch16 = (1<<USIWM0)|(0<<USICS0)|(1<<USITC);
      ch17 = (1<<USIWM0)|(0<<USICS0)|(1<<USITC)|(1<<USICLK);
    
      PORTB=0x00;
      DDRB=0xA0;
    ...
    }
    Если функцию передачи SendSPIByte зарядить в цикл, то осциллографом видны импульсы на UCSK выводе, частотой примерно 120кгц при указанной _delay_us(10); внутри функции, если эту задержку убрать, то 500кГц. Частота 2313 - 12Мгц.
    Атмега8 работает от внутр на 8МГЦ, у нее:
    Код:
    // SPI interrupt service routine
    interrupt [SPI_STC] void spi_isr(void)
    {
    unsigned char data;
    data=SPDR;
    // Place your code here   
    
    USART_Transmit(data);
    
    }
    
    
    main()
    {
      PORTB=0x00;
      DDRB=0x10;
    
      SPCR=0xC1;
      SPSR=0x00;
    
    
    // Clear the SPI interrupt flag
     #asm
        in   r30,spsr
        in   r30,spdr
     #endasm
    
     // Global enable interrupts
     #asm("sei")
    ...
    }
    Так вот, осциллом импульсы видны только на UCSK, на др. выводах тишина.
    Может ошибки инициализации, направления..

  4. #4
    С tiny2313 долго возился, пока не нашел где-то, что в tiny2313 DI - это всегда вход, DO - всегда выход и с тем SPI, по которому он пргораммируется, выводы не совпадают.Например, если tiny2313 работает мастером, то при обычном SPI вывод PB5/MOSI/DI был бы выходом, но в tiny2313 с его USI это вход (Data Input). Решал задачу перерезанием дорожек и приделыванием соплей. Программа из даташита работает, у меня в CodeVision функция SPI работает такая

    unsigned char SPI(unsigned char val){
    USIDR = val;
    USISR = (1<<USIOIF);

    #asm
    ldi r16,(1<<4)|(1<<3)|(1 <<1)|(1<<0)
    SPITransfer_loop:
    out 0x0D,r16
    sbis 0x0E,6
    rjmp SPITransfer_loop
    #endasm
    return USIDR;
    }
    Шуруп, забитый молотком, держит лучше, чем гвоздь, закрученный отверткой.

  5. #5
    токо вспомнил, что на днях вроде про подобное читал, но видимо не понял и забыл, вот сейчас в истории нашел речь о том
    http://www.arts-union.ru/smf/index.php?topic=160.0;wap2

    uu5jkb,

    сейчас попробую вашу функцию.

    Добавлено через 27 минут(ы):

    да ёмае..на каждом шагу спотыкаюсь..чтож так все тяжело идет то..
    Подскажите, как asm вставлять в AVR Studio?!

    у меня компил на функцию выше ругается:
    ...
    asm(
    ldi r16,(1<<4)|(1<<3)|(1 <<1)|(1<<0)
    .....

    ../Scan.c:195: error: expected string literal before 'ldi'
    Последний раз редактировалось Windk; 24.03.2011 в 12:53.

  6. #6
    Цитата Сообщение от Windk Посмотреть сообщение
    Подскажите, как asm вставлять в AVR Studio?!
    Если Вы пишите в чистой AVR Studio без С-компилятора на ассемблере, то просто вставьте строчку
    ldi r16,(1<<4)|(1<<3)|(1 <<1)|(1<<0)

    Если же на Си, тогда надо то же переписать, выглядеть будет приблизительно так

    unsigned char SPI(unsigned char val){
    USIDR = val;
    USISR = (1<<USIOIF);

    while(!(USISR & (1 << 6))){
    USICR = 0x1B;
    }

    return USIDR;
    }

    Попробуйте, должно заработать. Я писал на ассемблере только лишь потому, что надо было на передачу тратить как можно меньше времени
    Шуруп, забитый молотком, держит лучше, чем гвоздь, закрученный отверткой.

  7. #7
    uu5jkb,

    понял, попробую. но пока попробовал функцию по ссылке выше
    http://www.arts-union.ru/smf/index.php?topic=160.0;wap2

    работает! Правда я там повторы в цикл сделал, а то в тини2313 не лезло (2313 у меня обменом по USB с PC еще занимается)
    Но ваш код как-то красивей, сейчас опробую.

    Добавлено через 22 минут(ы):

    uu5jkb,

    с вашим вариантом не совсем работает. Т.е. что-то отправляется, прерывание в меге8 срабатывает, но терминал мне пробелы вместо передаваемого символа Q печатает.
    Последний раз редактировалось Windk; 24.03.2011 в 14:08.

  8. #8
    Цитата Сообщение от Windk Посмотреть сообщение
    уже 2ю неделю пытаюсь разобраться, как используя SPI перекинуть хотя бы байт с 2313 (Мастер) на атмегу8 ?
    даташит читал, гуглил..находил примеры перекладки кода на асме из даташита в код С.
    ничего не помогает..и я даже понять не могу.. толи 2313 не передает толи атмега8 и не пытается что либо принять.
    Используется 3х-проводка.
    Если кто разбирался с SPI у 2313 подскажите на что обратить внимание, где подводные камни.
    Мне еще не ясно, в CodeVision в генераторе проекта, если у атмега8 выбрать настройку SPI, там еще и частоту передачи нужно выбрать, отчего меняется код инициализации атмеги8..но я что-то никак понять не могу смысла выбора частоты..ведь тактируется все мастером.. зачем же выбирать частоту то?!
    Ответы на Ваши вопросы с примером работающего кода и для ATtiny2313 и для ATmega8 здесь

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Замена AT90S1200 на ATTINY2313 в синте UR5VUL
    от ew2ah в разделе Трансиверы, приемники КВ/УКВ
    Ответов: 8
    Последнее сообщение: 20.08.2011, 15:41
  2. Генерация звука ATtiny2313
    от saint1981 в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 0
    Последнее сообщение: 09.04.2010, 17:51
  3. Помогите разобраться с SPI
    от AVRBeginner в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 1
    Последнее сообщение: 25.11.2008, 14:29
  4. Нужна помощь!!!!!! по ATTINY2313
    от Wlad UR5EMO в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 31
    Последнее сообщение: 24.11.2008, 15:09
  5. Отличие Atmega8-16PI от Atmega8-16PU????
    от Toms в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 3
    Последнее сообщение: 26.06.2006, 22:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •