Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
23.02.2010, 00:09
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
шпротеус 7,6
думаю, что все нормально... хотя виртуальный терминал так и не пашет, даже когда все общение происходит правильно.
у Kabron`а в примере терминал нормально работает
|
|
|
|
23.02.2010, 00:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
В моем примере скорость 115200 устанавливается в свойствах терминала только записью ручками. Чтобы в последующем не сбрасывалась в дефолт, поставьте галочку - отображать свойства как текст.
|
|
|
|
23.02.2010, 00:19
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
у меня 38400 8/2, читает всякую муть
не исключено, что асмовские обе неправильно сконфигурированы и 2 ошибки дают правильный результат
в асме
Код:
|
; Set baud rate 38400
ldi r16,0x19
ldi r17,0
out UBRRH, r17
out UBRRL, r16
; Enable receiver and transmiter
ldi r16,(1‹‹RXCIE)|(1‹‹RXEN)|(1‹‹TXEN)
out UCSRB,r16
; Set frame format: 8data, 2stop
ldi r16, 0x0E
out UCSRC,r16 |
в си
Код:
|
void USART_Init(void)
{
UBRRH = 0;
UBRRL = 0x19; //скорость обмена 38400 бод
UCSRB = (1‹‹RXEN)|(1‹‹TXEN); //разр приема, разр передачи.
UCSRC = (1‹‹USBS)|(1‹‹UCSZ1)|(1‹‹UCSZ0); //размер слова 8 разрядов
} |
изменил в программах на 8/1 тип усарта - терминал вроде стал показывать нормально... но генератор молчит собака
Последний раз редактировалось spballiance; 23.02.2010 в 01:01.
|
|
|
|
23.02.2010, 01:25
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
точно 2 ошибки на асме дают правильное общение ![Улыбка](images/smilies/icon_smile.gif)
итак поправил на 38400/8/1
сишный код в терминал валит то, что хочется, а генератор молчит
асмовский код валит в терминал белиберду, а все работает
|
|
|
|
23.02.2010, 14:02
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
все, сломал голову
прием на асме:
Код:
|
get_char:
sbis UCSRA, RXC
rjmp get_char
in r16,UDR ; get the byte
ret ; and return
read_freq:
rcall get_char ; read bits 23..16
mov r26,r16
rcall get_char ; read bits 15..8
mov r25,r16
rcall get_char ; read bits 7..0
mov r24,r16
ret
;
; Interrupt routine for incoming bytes on the RS232 link
;
RX_COMPLETE_INT:
push r16
in r16,UDR
tx_1:
cpi r16,'s' ; 's' - frequency setting
brne tx_2
rcall read_freq
rjmp tx_exit
tx_2:
cpi r16,'0' ; '0' - stop
brne tx_3
mov r17,r16
rjmp tx_exit
tx_3:
cpi r16,'1' ; '1' - start
brne tx_4
mov r17,r16
rjmp tx_exit
; unknown command, just ignore it
tx_4:
tx_exit:
pop r16
reti |
отправка на си
Код:
|
USART_SendChar('1'); |
где
Код:
|
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1‹‹UDRE)));
UDR = sym;
} |
дебаггер в асме показывает в приемнике "FF", а терминал в отправленном "31"
во второй прошивке на асме, которая нормально запускает генератор
вываливает в терминал 0х80, но нормально запускает генерацию при отправке "1"
Код:
|
ldi r16,'1' ;
rcall send_char |
где
Код:
|
send_char:
push r16 ; save r16
send_c2:
sbis UCSRA, UDRE
rjmp send_c2
pop r16 ; restore r16
out UDR,r16 ; send char
ret ; and return |
инициализация
Код:
|
; Set baud rate 38400
ldi r16,0x19
ldi r17,0
out UBRRH, r17
out UBRRL, r16
; Enable receiver and transmiter
ldi r16,(1‹‹RXCIE)|(1‹‹RXEN)|(1‹‹TXEN)
out UCSRB,r16
; Set frame format: 8data, 1stop
ldi r16, (1‹‹UCSZ1)|(1‹‹UCSZ0)
out UCSRC,r16 |
Код:
|
void USART_Init(void)
{
UBRRH = 0;
UBRRL = 0x19; //скорость обмена 38400 бод
UCSRB = (1‹‹RXEN)|(1‹‹TXEN); //разр приема, разр передачи.
UCSRC = (1‹‹UCSZ1)|(1‹‹UCSZ0); //размер слова 8 разрядов
} |
компилятор си делает так. по регистрам все аналогично асму
Код:
|
_USART_Init:
; UBRRH = 0;
LDI R30,LOW(0)
OUT 0x2,R30
; UBRRL = 0x19; //скорость обмена 38400 бод
LDI R30,LOW(25)
OUT 0x9,R30
; UCSRB = (1‹‹RXEN)|(1‹‹TXEN); //разр приема, разр передачи.
LDI R30,LOW(24)
OUT 0xA,R30
; UCSRC = (1‹‹UCSZ1)|(1‹‹UCSZ0); //размер слова 8 разрядов
LDI R30,LOW(6)
OUT 0x3,R30
;}
RET
; |
делал ассемблерную вставку инициализации усарта в си от рабочего асмовского передатчика - результат тот же: не реагирует
Последний раз редактировалось spballiance; 23.02.2010 в 20:50.
|
|
|
|
23.02.2010, 23:09
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
RTFM CKDIV8 отключать надо при симуляции
|
|
|
|
24.02.2010, 00:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Да и не только при симуляции
|
|
|
|
24.02.2010, 01:37
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от spballiance
|
; main loop
LOOP1: add r28,r24 ;1
. . . . . . . . . . . . . . . .
rjmp LOOP1 ;2 =› 13 cycles
[/CODE]
|
Только сейчас обратил внимание, что у вас главный цикл занимает 13 тактов, а смена частоты прерывает генерацию. Я делал цикл на 10 тактов и в нём приём новой частоты по rs232, и всё это без остановки генерации.
|
|
|
|
24.02.2010, 02:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
![Улыбка](images/smilies/icon_smile.gif) А уменя цикл на 7 тактов при 32 разрядах и настройке по RS
Хотя, честно говоря, не подозреваю, как можно сменить установку не прерывая генерации.
=GM=, поделитесь?
Последний раз редактировалось Kabron; 24.02.2010 в 03:20.
|
|
|
|
24.02.2010, 14:23
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Регулировка частоты на контроллере
У меня тоже оказался 32-разрядный аккумулятор и 7 тактов на выборку, вы не одиноки ![Весело](images/smilies/icon_laugh.gif) .
Что касается смены частоты. По rs232 принимаются байты и размещаются во временных регистрах. Если принято 4 байта, то они переписываются в штатные регистры. Самое трудное было додуматься, как сделать синхронизацию первого байта. Я сделал её по времени, т.е. четыре байта частоты должны передаваться без значительных перерывов, как только появляется перерыв, значит надо ждать новую посылку из 4-х байт.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:22.
|
|