Замените этот МК на другой, к примеру на 628А, тогда можно вывести частоту с помощью модуля CCP.
Мелкие вопросы по МК и ПЛИС.
Параллельно - никак. Таймер подключен к предделителю аппаратно, и забрать сигнал из этой точки никак не получится.
Замените этот МК на другой, к примеру на 628А, тогда можно вывести частоту с помощью модуля CCP.
Замените этот МК на другой, к примеру на 628А, тогда можно вывести частоту с помощью модуля CCP.
- Реклама
Вот теперь понятно. Если ещё буду собирать - обязательно конденсаторами, кстати вопрос и стоял в том, можно ли подстроечным конденсатором подогнать нужную частоту.ibiza11 писал(а):У этого микроконтроллера только один аппаратный таймер, так что без смены предделителей и алгоритма нельзя.
Был бы МК 12F629 - там можно было бы поиграть константой...
Невозможно, Alex, тема закрыта...Аlex писал(а):Замените этот МК на другой, к примеру на 628А, тогда можно вывести частоту с помощью модуля CCP.
А здесь я спрашивал только для получения информации. Спасибо всем!
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Не могу победить UART. Заместо нужного символа приходит вязь арабская. Грешу на скорость, т.к. в эмуляторе первые символы появляются на 8-ой секунде эмуляции, но проверки светодиодом и _delay_ms(1000) говорят об обратном. Fuse должны быть в норме, т.к. за год до этого этой же микрухой работал с 1-wire и выводил на жк.
Компилятор winavr, среда code::blocks.
Чтение Datashita голову просветлило, но должного эффекта не оказало
Кварц 20 mhz.
Это может быть виною компилятора? Может другой режим оптимизации выбрать(Сейчас -Os)?

Компилятор 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
Кстати, зашиваю uniprof потому 1 из даташита соответствует галочке в uniprof.
Видимо не кто мне не поможет
Видимо не кто мне не поможет
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Коты, есть зацепка, watchdog! Сейчас выключил его фьюзом, нужно его дополнительно выключать программно?
- Реклама
Нет.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Интересно... Тогда какого рожна я получаю заместо одного кучу символов
В основном 'C'(что соответствует 0х43), что уже радует, но не только
Короче у меня две проблемы согласованность скорости/формата и watchdog.
Может у меня кварц г-но или кондёры около него?! Вообще как то возможно проверить на какой частоте работает камень?
В основном '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
Нашел хороший софт Terminal v1.9b, в нем можно HEX смотреть, вот что мне приходит:
0x43 преобладает. Йоху!
Только больно много символов
Может оптимизация как то влияет?
Код: Выделить всё
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Только больно много символов
Может оптимизация как то влияет?
- Сообщения: 86
- Зарегистрирован: Вт авг 28, 2012 21:07:09
Ребята, у меня пара вопросов по прерываниям, уже 3й день немогу с ними разобраться, возможно вопросы глуповаты, но всеже
1) Можно ли править регистры таймеров и прерываний 2чным кодом тоесть вместо сдвигов использовать =1010101
2) Как определить, какое именно обьявление прерывания использовать, вот у меня пример interrupt [EXT_INT0] void ext_int0_isr(void)
насколько я понял это прерывание по переполнению, обьясните пожалуйста, что значят фразы после interrupt....
И где можно узнать, какого вида должно быть такое обьявление, если мне например нужно прерывание по совпадению таймера!
1) Можно ли править регистры таймеров и прерываний 2чным кодом тоесть вместо сдвигов использовать =1010101
2) Как определить, какое именно обьявление прерывания использовать, вот у меня пример interrupt [EXT_INT0] void ext_int0_isr(void)
насколько я понял это прерывание по переполнению, обьясните пожалуйста, что значят фразы после interrupt....
И где можно узнать, какого вида должно быть такое обьявление, если мне например нужно прерывание по совпадению таймера!
1.В регистр можно записать число. Но вариант с представлением этого числа "в виде сдвигов" считается более наглядным.
- Сообщения: 86
- Зарегистрирован: Вт авг 28, 2012 21:07:09
незнаю даже почему это нагляднее, как помне это лишняя информация
а что по 2му вопросу?
а что по 2му вопросу?
Прерывание[внешнее_от_лапки_INT0] не параметрируемое Название (без параметров). А искать описание объявлений всех прерываний в хелпе к кодевижену.interrupt [EXT_INT0] void ext_int0_isr(void)
Docendo discimus
Странные люди что может сказать человекунезнаю даже почему это нагляднее, как помне это лишняя информация
REGISTER =0b10100101;
,в то время как
REGISTER =(1<<BIT0)| (1<<BIT2)| (1<<BIT5)| (1<<BIT7);
Точно говорит читающему, что биты 0,2,5,7 установлены,остальные сброшены.Причем биты именованные и не нужно заглядывать в даташит под каким номером идет нужный бит.
- Сообщения: 86
- Зарегистрирован: Вт авг 28, 2012 21:07:09
Уважаемый кот, вы мне помогаете напротяжении всего моего пути програмирования контролеров, большое вам за это спасибо, теперь я вьехал зачем нужно использовать именно сдвиги...... Завтра буду пробовать организовать свой код на основе прерывания..... до сегодняшнего дня пытался всячески их избегать, потому что не понимал как они работают, а сейчас понял, насколько эьо удобно.......
Сдвиги использовать вовсе не обязательно, но это довольно таки удобно. В общем случае в начале инициализации CVAVR сам прописывает нужные константы, а вот вы в своем коде уже можете со сдвигами баловаться.
Только есть как всегда подводные камни.Для того, чтобы сдвиги заработали в CVAVR нужно поставить в свойствах проекта галку "IO bits definitions"( вроде так называется.)
Студия отлично сдвиги понимает достаточно подключить
#include "avr/io.h"
PS
Ставим плюсы
Только есть как всегда подводные камни.Для того, чтобы сдвиги заработали в CVAVR нужно поставить в свойствах проекта галку "IO bits definitions"( вроде так называется.)
Студия отлично сдвиги понимает достаточно подключить
#include "avr/io.h"
PS
Всегда пожалуйставы мне помогаете на протяжении всего моего пути програмирования контролеров, большое вам за это спасибо
Ставим плюсы
В поисках истины человек развивается.
- Сообщения: 132
- Зарегистрирован: Вс сен 23, 2012 05:51:35
Здравствуйте. Помогите пожалуйста с SD картой. Никак не могу понять в чём проблема. Контроллер - parallax propeller
Суть в том, что карточку не берут ни стандартные либы, ни мой ассемблерный код. Сначала использовал слот для карт, потом припаял карту к плате, потом подумал, что уже её сжёг к чертям - отпаял и вставил в ноут - пашет. Вернул в проект - не пашет. Не отвечает на любые команды вообще, просто молчит. Может быть кто подскажет, в чём может быть проблема? Судя по всему, она в самом железе, а не в коде, но идеи просто отсутствуют, тк уже и резисторами её к питанию подтянул, как в интернете советуют и прозвенел все соединения по 10 раз - толку нет. Единственный оставшийся вариант - не хватает питания, но не знаю, как это проверить.
Карточка обычный kingston на 512 мб
Суть в том, что карточку не берут ни стандартные либы, ни мой ассемблерный код. Сначала использовал слот для карт, потом припаял карту к плате, потом подумал, что уже её сжёг к чертям - отпаял и вставил в ноут - пашет. Вернул в проект - не пашет. Не отвечает на любые команды вообще, просто молчит. Может быть кто подскажет, в чём может быть проблема? Судя по всему, она в самом железе, а не в коде, но идеи просто отсутствуют, тк уже и резисторами её к питанию подтянул, как в интернете советуют и прозвенел все соединения по 10 раз - толку нет. Единственный оставшийся вариант - не хватает питания, но не знаю, как это проверить.
Карточка обычный kingston на 512 мб
Собираю самопальный мини-компьютер
- Сообщения: 4435
- Зарегистрирован: Сб мар 07, 2009 20:44:36
Вольтметром померяйте напряжение питания. Напишите сюда. Схема включения должна быть примерно такой (см. картинку).
Возможно вы неверно соединили линии MISO и MOSI.
MISO----->MISO
MOSI----->MOSI - так должно быть.
Ну и код программы хотя бы в студию. А может и в инициализации портов что-то не то, в результате чего карточка и не реагирует
Возможно вы неверно соединили линии MISO и MOSI.
MISO----->MISO
MOSI----->MOSI - так должно быть.
Ну и код программы хотя бы в студию. А может и в инициализации портов что-то не то, в результате чего карточка и не реагирует
- Вложения
-
- Безымянный.jpg
- (39.27 КБ) 399 скачиваний
Не умеешь - не берись, но не взявшись не научишься...
- Сообщения: 132
- Зарегистрирован: Вс сен 23, 2012 05:51:35
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
Кондёр не помог, хотя система в целом стала работать стабильнее.
Собираю самопальный мини-компьютер
- Сообщения: 4435
- Зарегистрирован: Сб мар 07, 2009 20:44:36
Странное поведение... Никогда не замечал такого.
Пробуйте все-таки с питанием разобраться, без осциллографа сложнова-то будет. Тыкните им на вывод питания что там за картина?
Пробуйте все-таки с питанием разобраться, без осциллографа сложнова-то будет. Тыкните им на вывод питания что там за картина?
Не умеешь - не берись, но не взявшись не научишься...


