07.08.2012, 14:12
|
|
Частый гость
Регистрация: 01.03.2008
Сообщений: 31
Сказал спасибо: 2
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Proteus + UART 18F4550
Железо с 18F4550, кварц 20 МГц, используется хардварный UART.
Посылаю пакет на 9600, принимаю на UART PIKKit2 либо на COM-порт, все корректно.
НО! Чтобы все это работало, нужно в программе ставить в свойствах 24МГЦ
В CCS C:
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5, CPUDIV1,VREGEN,NOMCLR
#use delay(clock=24000000)
#use rs232(uart1, baud=9600,stream=PIC)
Если ставить #use delay(clock=20000000) на 20МГц, в железе UART посылает чушь.
В протеусе эта схема работает, но временные задержки отличаются о железной версии в 2 раза или около.
Проверено с 4-мя резонаторами.
Как можно синхронизировать схему в протеусе, программу и железо?
|
|
|
|
07.08.2012, 14:18
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Proteus + UART 18F4550
kib12, Используете PLL ...
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 17:47
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Proteus + UART 18F4550
А вручную инитиализацию написать не судьба?
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
07.08.2012, 23:30
|
|
Частый гость
Регистрация: 01.03.2008
Сообщений: 31
Сказал спасибо: 2
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Proteus + UART 18F4550
Сообщение от Easyrider83
|
А вручную инитиализацию написать не судьба?
|
А посоветовать что-нибудь конкретное не судьба?
Я не студент, не новичок, и это не курсовая работа. И стараюсь не комментировать посты, если хоть на процент сомневаюсь в полезности.
Да, используется PLL5, фьюзы взяты из примера CCS C. Но не смог найти популярного объяснения, как выбрать в схеме в протеусе параметр частоты тактового генератора, как к нему привязать фьюзы в CCSC, и как все это привязать к железу.
Решил, наконец, попробовать с USB.
Например, делаем в CCS тактовую 20 000 000, а что указывать в схеме в протеусе, тоже 20МГц? Не совсем что-то получается ни с UART, ни с delay.
А в железе тоже нестыковка.
Опытным путем определил, что если при этих фьюзах в компиляторе поставить 4Мгц, то в протеусе нужно ставить 10Мгц, тогда все как бы работает, но в железе резонатор нужен тоже на 4 Мгц. При переходе на резонатор 20 Мгц (требуется для USB) все конкретно запуталось. Простые арифметические расчеты не помогают.
Где-нибудь есть методика на любом человеческом языке?
|
|
|
|
07.08.2012, 23:56
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Proteus + UART 18F4550
Сообщение от kib12
|
А посоветовать что-нибудь конкретное не судьба?
|
Легко.
Код:
|
void UART_TX (char dat);
void UART_TX_TEXT ( char *dat);
void main()
{
TXSTA=(1‹‹CSRC)|(1‹‹TXEN);
RCSTA=(1‹‹SPEN)|(1‹‹CREN);
SPBRG=31;
UART_TX_TEXT("HELLO WORLD!");
}
void UART_TX (char dat)
{
while(!PIR1.TXIF);
TXREG=dat;
PIR1.TXIF=0;
}
void UART_TX_TEXT ( char *dat)
{
while (*dat) UART_TX (*dat++);
} |
10 минут времени потратил
Последний раз редактировалось Easyrider83; 08.08.2012 в 00:21.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
08.08.2012, 09:26
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Proteus + UART 18F4550
Сообщение от kib12
|
Где-нибудь есть методика на любом человеческом языке?
|
Протеус не причем , читайте даташит на контроллер .
И вычисляйте какой будет внутренняя частота.
http://www.ccsinfo.com/forum/viewtop...hlight=18f4550
Как пример настройки....
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 08.08.2012 в 09:35.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
08.08.2012, 09:38
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Proteus + UART 18F4550
Адски не люблю всякие подобные хрени:
Код:
|
#use RS232(BAUD=9600, XMIT=PIN_C1, RCV=PIN_C2,FORCE_SW, STREAM=COM_A)
#use RS232(BAUD=9600, XMIT=PIN_C4, RCV=PIN_C5,FORCE_SW, STREAM=COM_B)
#use RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7,FORCE_SW, STREAM=COM_C) |
Особенно эту:
Код:
|
fprintf(COM_C,"\r\nCOM_C Running\r\n"); |
Чего он там накомпилирует... даже представить страшно. Мы лучше по-старинке. Зато красиво и прозрачно.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
08.08.2012, 09:43
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Proteus + UART 18F4550
Easyrider83, Паш да как настраивать и работать с UART это дело ТС .
Там проблема в неправильном расчете тактовой .
Он упорно считает что частота равна кварцу и при этом работает с PLL ...
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
08.08.2012, 09:46
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Proteus + UART 18F4550
А, у меня такая же ошибка. Я там на 20МГц рассчитал. Исправлю когда время будет. Хотя я тупо взял табличное значение из даташита. Как бы даже не парился особо ))
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:22.
|
|