Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Сообщение danger3466 »

Коты, есть зацепка, watchdog! Сейчас выключил его фьюзом, нужно его дополнительно выключать программно?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Нет.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Сообщение danger3466 »

Интересно... Тогда какого рожна я получаю заместо одного кучу символов
В основном 'C'(что соответствует 0х43), что уже радует, но не только :(

Короче у меня две проблемы согласованность скорости/формата и watchdog.
Может у меня кварц г-но или кондёры около него?! Вообще как то возможно проверить на какой частоте работает камень?

Код: Выделить всё

#define F_CPU 20000000
#include <avr/io.h>
#include <util/delay.h>
#define BAUD 129
//BAUD ((F_CPU/(USART_SPEED*16)) - 1)     : ( 20 000 000 / (9600*16) ) - 1 = 129

inline void USART_Init( unsigned int baud ){
/* Устанавливаем скорость */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Включаем прием и передачу */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Устанавливаем формат: 8n1 */
UCSRC = ( 0 << UCSZ2 ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 ) | ( 0 << UPM1 ) | ( 0 << UPM0 ) | (0 << USBS);
}

int main(void){
    USART_Init(BAUD);
        _delay_ms(1000);
        UDR = 0x43;
    while(1){}

    return 0;
}
Встал на лапы
Аватара пользователя
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Сообщение danger3466 »

Нашел хороший софт Terminal v1.9b, в нем можно HEX смотреть, вот что мне приходит:

Код: Выделить всё

43 43 43 43 43 43 43 43 83 43 A1 A3 CB 43 43 43 FE 43 43 43 85 43 43 43 94 43 43 43 E3 A3 83 43 43 C3 43 BE 43 43 43 C3 43 43 43 43 FF 43 43 43 A3 A3 43 A3 43 43 C3 43 A3 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
0x43 преобладает. Йоху!
Только больно много символов :(

Может оптимизация как то влияет?
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Сообщение Sceam73 »

Ребята, у меня пара вопросов по прерываниям, уже 3й день немогу с ними разобраться, возможно вопросы глуповаты, но всеже
1) Можно ли править регистры таймеров и прерываний 2чным кодом тоесть вместо сдвигов использовать =1010101
2) Как определить, какое именно обьявление прерывания использовать, вот у меня пример interrupt [EXT_INT0] void ext_int0_isr(void)
насколько я понял это прерывание по переполнению, обьясните пожалуйста, что значят фразы после interrupt....
И где можно узнать, какого вида должно быть такое обьявление, если мне например нужно прерывание по совпадению таймера!
Реклама
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

1.В регистр можно записать число. Но вариант с представлением этого числа "в виде сдвигов" считается более наглядным.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Сообщение Sceam73 »

незнаю даже почему это нагляднее, как помне это лишняя информация
а что по 2му вопросу?
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

interrupt [EXT_INT0] void ext_int0_isr(void)
Прерывание[внешнее_от_лапки_INT0] не параметрируемое Название (без параметров). А искать описание объявлений всех прерываний в хелпе к кодевижену.
Docendo discimus
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

незнаю даже почему это нагляднее, как помне это лишняя информация
Странные люди что может сказать человеку
REGISTER =0b10100101;
,в то время как
REGISTER =(1<<BIT0)| (1<<BIT2)| (1<<BIT5)| (1<<BIT7);
Точно говорит читающему, что биты 0,2,5,7 установлены,остальные сброшены.Причем биты именованные и не нужно заглядывать в даташит под каким номером идет нужный бит.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Сообщение Sceam73 »

Уважаемый кот, вы мне помогаете напротяжении всего моего пути програмирования контролеров, большое вам за это спасибо, теперь я вьехал зачем нужно использовать именно сдвиги...... Завтра буду пробовать организовать свой код на основе прерывания..... до сегодняшнего дня пытался всячески их избегать, потому что не понимал как они работают, а сейчас понял, насколько эьо удобно.......
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Сдвиги использовать вовсе не обязательно, но это довольно таки удобно. В общем случае в начале инициализации CVAVR сам прописывает нужные константы, а вот вы в своем коде уже можете со сдвигами баловаться.
Только есть как всегда подводные камни.Для того, чтобы сдвиги заработали в CVAVR нужно поставить в свойствах проекта галку "IO bits definitions"( вроде так называется.)
Студия отлично сдвиги понимает достаточно подключить
#include "avr/io.h"

PS
вы мне помогаете на протяжении всего моего пути програмирования контролеров, большое вам за это спасибо
Всегда пожалуйста
Ставим плюсы :))
В поисках истины человек развивается.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

Сообщение black_lizard »

Здравствуйте. Помогите пожалуйста с SD картой. Никак не могу понять в чём проблема. Контроллер - parallax propeller

Суть в том, что карточку не берут ни стандартные либы, ни мой ассемблерный код. Сначала использовал слот для карт, потом припаял карту к плате, потом подумал, что уже её сжёг к чертям - отпаял и вставил в ноут - пашет. Вернул в проект - не пашет. Не отвечает на любые команды вообще, просто молчит. Может быть кто подскажет, в чём может быть проблема? Судя по всему, она в самом железе, а не в коде, но идеи просто отсутствуют, тк уже и резисторами её к питанию подтянул, как в интернете советуют и прозвенел все соединения по 10 раз - толку нет. Единственный оставшийся вариант - не хватает питания, но не знаю, как это проверить.

Карточка обычный kingston на 512 мб
Собираю самопальный мини-компьютер
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Вольтметром померяйте напряжение питания. Напишите сюда. Схема включения должна быть примерно такой (см. картинку).
Возможно вы неверно соединили линии MISO и MOSI.
MISO----->MISO
MOSI----->MOSI - так должно быть.
Ну и код программы хотя бы в студию. А может и в инициализации портов что-то не то, в результате чего карточка и не реагирует :)
Вложения
Безымянный.jpg
(39.27 КБ) 384 скачивания
Не умеешь - не берись, но не взявшись не научишься...
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

Сообщение black_lizard »

Вольтметром померяйте напряжение питания. Напишите сюда. Схема включения должна быть примерно такой (см. картинку).
3.2 В
Схема подключения такая. Только резисторы номиналом поменьше и кондёра нет. Мне уже пришла в голову мысль о том, что вся проблема в нестабильности напряжения, стоит попробовать ...
Вот ещё что заметил - если сплошным потоком слать данные на карточку, изображение начинает на телевизоре рябить, выводимое с МК.

Как я уже сказал, я пробовал стандартную, испробованную библиотеку. На ресете карточки запинается и инициализация не идёт дальше. Вот код инициализации:

Код: Выделить всё

PUB start_explicit( DO, CLK, DI, CS ) : card_type | tmp, i
{{
  Do all of the card initialization in SPIN, then hand off the pin
  information to the assembly cog for hot SPI block R/W action!
}}

  ' (start with cog variables, _BEFORE_ loading the cog)
  pinDO := DO
  maskDO := |< DO
  pinCLK := CLK
  pinDI := DI
  maskDI := |< DI
  maskCS := |< CS
  adrShift := 9 ' block = 512 * index, and 512 = 1<<9
  ' pass the output pin mask via the command register
  maskAll := maskCS | (|<pinCLK) | maskDI
  dira |= maskAll  
  ' get the card in a ready state: set DI and CS high, send => 74 clocks
  outa |= maskAll
  repeat 4096
    outa[CLK]~~
    outa[CLK]~
  ' time-hack
  SPI_block_index := cnt
  ' reset the card
  tmp~
  repeat i from 0 to 9
    if tmp <> 1
      tmp := send_cmd_slow( CMD0, 0, $95 )
      if (tmp & 4)
        ' the card said CMD0 ("go idle") was invalid, so we're possibly stuck in read or write mode
        if i & 1
          ' exit multiblock read mode
          repeat 4
            read_32_slow        ' these extra clocks are required for some MMC cards
          send_slow( $FD, 8 )   ' stop token
          read_32_slow
          repeat while read_slow <> $FF
        else
          ' exit multiblock read mode
          send_cmd_slow( CMD12, 0, $61 )
  
  if tmp <> 1
    ' the reset command failed!
    crash( ERR_CARD_NOT_RESET )
Собираю самопальный мини-компьютер
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

Сообщение black_lizard »

Кондёр не помог, хотя система в целом стала работать стабильнее.
Собираю самопальный мини-компьютер
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Странное поведение... Никогда не замечал такого.
Пробуйте все-таки с питанием разобраться, без осциллографа сложнова-то будет. Тыкните им на вывод питания что там за картина?
Не умеешь - не берись, но не взявшись не научишься...
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Arlleex писал(а):Возможно вы неверно соединили линии MISO и MOSI.
MISO----->MISO
MOSI----->MOSI - так должно быть.
Бред!!! :)))
Нет у SD ни MISO, ни MOSI !!! :)))
Есть DI и DO !!!
SD не может быть мастером... по определению... по сути своей...

MISO----->DO
MOSI----->DI - вот так должно быть.

И на картиночке... Подтягивать CS к земле... да ещё через 1 МОм... :)))
Народ... вы чё??? Конец света досрочно справлять начали... или Новый Год??? :)))
"Я не даю готовых решений, я заставляю думать!"(С)
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Arlleex писал(а):Странное поведение... Никогда не замечал такого.
Чего не замечали??? Повышения тока потребления при работе SD ??? :))
Всегда так было!!!
"Я не даю готовых решений, я заставляю думать!"(С)
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

Сообщение black_lizard »

Пробуйте все-таки с питанием разобраться, без осциллографа сложнова-то будет. Тыкните им на вывод питания что там за картина?
Был бы он - было бы понятнее, что там с питанием.
MISO----->DO
MOSI----->DI - вот так должно быть.
Если карточка работает в родном режиме то да, CMD/DI и DAT0/DO, но она специально и переводится в SPI режим, тогда выводы и можно назвать MOSI и MISO. И разве MOSI не расшифровывается Master Out Slave In?

Карточка и правда себя странно ведёт. Попробовал другую - тоже не пашет, хотя выводы я перепроверил - всё правильно.

Я делаю так - инициализирую и жду, пока карточка чем-нибудь подёргает. Но она не дёргает не MISO, не CLK. Заваливание её ресетами тоже не приводит к результату по прежнему.
Собираю самопальный мини-компьютер
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

Сообщение black_lizard »

Вот мой ассемблерный код на отправку байта:
''SEND CMD ===|

Код: Выделить всё

sendSD
                        mov circle, #8          '8 bits
                        
                                                'sending cirlce
send_loop               mov     calc, sndByte
                        and     calc, #$80
                        cmp     calc, #0        wz      
                        
                        or      outa, mosi
              if_z      andn    outa, mosi
               
              
                        or      outa, clock
                        shl     sndByte, #1
                        andn    outa, clock

                        
                        cmpsub  circle, #1      wz, wr
                        if_nz   jmp #send_loop
                        shr     sndByte, #8 
sendSD_ret              ret
Кривоват немного, но я сначала всегда больше для наглядности пишу, чем для скорости.

инициализирую:

Код: Выделить всё

               or      dira, pins_out         'set pins on out    
                        or      outa, pins_st          'set 1 on start out pins

                        mov     sym, #100               '100 cyclres by 8 bit
                         
                                                            ''initializing SD in SPI   
clk_loop            mov     sndByte, #$FF

                        call    #sendSD   

                        cmpsub  sym, #1         wr, wz
              if_nz     jmp     #clk_loop

                        andn    outa, cs1             'set NS to 0
                        andn    outa, cs2 

                        mov     sndByte, #$40
                        call    #sendSD
                        mov     sndByte, #$00
                        call    #sendSD
                        call    #sendSD
                        call    #sendSD  
                        call    #sendSD
                        mov     sndByte, #$95
                        call    #sendSD
Дальше жду ответа, но карточка молчит
Собираю самопальный мини-компьютер
Ответить

Вернуться в «Разные вопросы по МК»