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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Параллельно - никак. Таймер подключен к предделителю аппаратно, и забрать сигнал из этой точки никак не получится.
Замените этот МК на другой, к примеру на 628А, тогда можно вывести частоту с помощью модуля CCP.
Реклама
nvz
Электрический кот
Аватара пользователя
Сообщения: 1056
Зарегистрирован: Чт ноя 25, 2010 16:58:42
Откуда: Средний Урал

Сообщение nvz »

ibiza11 писал(а):У этого микроконтроллера только один аппаратный таймер, так что без смены предделителей и алгоритма нельзя.
Вот теперь понятно. Если ещё буду собирать - обязательно конденсаторами, кстати вопрос и стоял в том, можно ли подстроечным конденсатором подогнать нужную частоту.
Был бы МК 12F629 - там можно было бы поиграть константой...
Аlex писал(а):Замените этот МК на другой, к примеру на 628А, тогда можно вывести частоту с помощью модуля CCP.
Невозможно, Alex, тема закрыта...
А здесь я спрашивал только для получения информации. Спасибо всем!
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Сообщение danger3466 »

Не могу победить UART. Заместо нужного символа приходит вязь арабская. Грешу на скорость, т.к. в эмуляторе первые символы появляются на 8-ой секунде эмуляции, но проверки светодиодом и _delay_ms(1000) говорят об обратном. Fuse должны быть в норме, т.к. за год до этого этой же микрухой работал с 1-wire и выводил на жк.
Компилятор winavr, среда code::blocks.
Чтение Datashita голову просветлило, но должного эффекта не оказало :(
Кварц 20 mhz.

Это может быть виною компилятора? Может другой режим оптимизации выбрать(Сейчас -Os)?

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

#define F_CPU 20000000UL
#include <avr/io.h>
#include <util/delay.h>
#define USART_SPEED 9600
#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);
}

void USART_Transmit( unsigned char data ){
    //ждем окончания передачи предыдущего байта
    while ( !( UCSRA & (1<<UDRE)) )
        ;

    //передача данных
    //UDR = data;
    UDR = 0x43;
}

int main(void){
    USART_Init(BAUD);
    while(1){
        _delay_ms(1000);
        USART_Transmit('G');
    }

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

Сообщение danger3466 »

Кстати, зашиваю uniprof потому 1 из даташита соответствует галочке в uniprof.
Видимо не кто мне не поможет :(
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Сообщение danger3466 »

Коты, есть зацепка, watchdog! Сейчас выключил его фьюзом, нужно его дополнительно выключать программно?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20132
Зарегистрирован: Чт сен 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 КБ) 399 скачиваний
Не умеешь - не берись, но не взявшись не научишься...
Встал на лапы
Аватара пользователя
Сообщения: 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 »

Странное поведение... Никогда не замечал такого.
Пробуйте все-таки с питанием разобраться, без осциллографа сложнова-то будет. Тыкните им на вывод питания что там за картина?
Не умеешь - не берись, но не взявшись не научишься...
Ответить

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