|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:29 pm
Предаване и приемане по RS232 в CCS. Как?
| Автор |
Съобщение |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Ами не не съм разменил 7 и 8 крак. Мисля, че трябва да са така.
Благодаря за съвета. Ще опитам и по този начин. 
|
| Вто Юни 06, 2006 12:20 am |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
и изобщо за какво ти е макс?!
на симулация?!
вържи ги на късо RX и TX още при пика
|
| Вто Юни 06, 2006 12:31 am |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Аки не съм сигурен, но в повечето примерчета е показано че така се конфигурира хардуерният УСАРТ. Мислех си че проблемът е в битрейта (10400), но се оказва, че това не е проблема. Като го сложа на 9600 също не става. Егаси, не съм вярвал, че може едно предаване на число да е толкова трудно. Ами представям си ако тръгна да предавам цели стрингове или поредица от числа  . Борбата продължава.
п.с. Ако не се влияете от мойта "програма" (която е явно супер бъгава)  , как бихте го реализирали? Предавам по ТХ цифрата 1 и искам същата цифра да ми се върне по РХ и да я изобразя на ЛСД.
Когато ползвам вградения сериал порт монитор на ЦЦСа всичко е ОК. Което значи че тапата ми работи. С мойта програмка не комуникира.
|
| Вто Юни 06, 2006 10:26 am |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
Съвсем наскоро имах такъв проблем. Проблема беше, че RS-a тръгва с overrun error, която грешка трябва да се изчисти за да тръгне да приема нормално!
|
| Вто Юни 06, 2006 10:58 am |
|
 |
|
valioman
Ранг: Почетен член
Регистриран на: Съб Сеп 17, 2005 5:07 pm Мнения: 813 Местоположение: Сливен
|
Пробвай това При мен работи без грешка  Компилаторът ми е CCS
#include <16F877.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#include <LCD.C>
char c;
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
lcd_init();
while(1) {
putc('*');
Delay_ms(100);
c=getc();
Delay_ms(1000);
printf(lcd_putc,"\fres= %C", c);
}
}
|
| Вто Юни 06, 2006 12:09 pm |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
valioman, програмката и схемата което си ми изпратил работят. Понеже видях, че програмката ми не се различава от много от твоята помислих че проблемът е в хардуера. Така се и оказа. Махнах МАКСа232 и всичко се оправи. Сега започвам да мисля защо става така. Трябва на всяка цена да го пусна работещо с МАКСа иначе не ми върши работа. Както каза и mndsl и при мен тръгва с overrun error. Незнам защо и незнам как да я изчистя. Сигурно трябва да се инвертира байта който приемам преди да го изобразя (заради инвертираните изходи на МАКСа).
|
| Вто Юни 06, 2006 12:54 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Какво означава "тръгва с overrun error" ? При включване на захранването така ти тръгва комуникацията, или при началото на всеки пакет данни ? И защо да не знаеш как да я изчистиш грешката ? RCSTA.1 го нулираш и се оправя. Появява се тази грешка, когато FIFO буфера се препълни. В частта за USART е добре описана грешката. Тази грешка, най-често се дължи на шумове влизащи в RxD линията на професора, или пък в не дотам бързата реакция при четене на входните данни ( много зает професор ).
Това за инвертираното на байта откъде ти хрумна ?  MAX, че интвертира, инвертира, но нали инвертира 2 пъти, следователно няма на пракика промяна в битовете на предаваните/приеманите данни. По скоро не можеш да свържеш правилно MAX и затова ти идва и overrun error и разните инверсии.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Юни 06, 2006 1:25 pm |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
"Какво означава "тръгва с overrun error" ? При включване на захранването така ти тръгва комуникацията"
Точно това означава.
"RCSTA.1 го нулираш и се оправя"
Този бит е read-only се нулира само хардуерно!
Overrun Error се изчиства с прочитане на RCREG, последвано от нулиране на бит CREN от регистър RCSTA и отново установяване на същия бит, т.е.:
MOVF RCREG,W
BCF RCSTA,CREN
BSF RCSTA,CREN
|
| Вто Юни 06, 2006 1:27 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Sorry, нямах пред мен PDF, запомнил съм номера на бита в RCSTA.
Ако така тръгва комуникацията какъв е дерта тогава ? Прати няколко байта в повече, докато се стабилизара предаването и тогава изпращай своите данни.
Никога не съм използвал USART без прекъсвания, винаги с прекъсвания и там се обработват тези грешки. Освен това не може да се очаква, че ще се изхврлят някакви данни от проца по USART модула и те непременно ще достигнат верни до другата страна. Затова има разни протоколи на контрол на приемането/предаването на данни. Щото иначе на масата ще се изпратят данни от платката до ПК или нещо от сорта, но на къра нещата са други . 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Юни 06, 2006 2:47 pm |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
Дертът е в приемането , не в предаването и е такъв, че докато не нулираш грешката, колкото и байта да пратиш няма да тръгне да приема или ако тръгне ще бъде в случаен момент. Човек, който не знае това, може да се блъска 1 седмица с този проблем. Нека обобщим казаното: RS-a ще работи коректно когато всички грешки бъдат нулирани. И всеки път преди да се пращат или да се приемат данни трябва да се проверява статуса на USART-a!
Последна промяна mndsl на Вто Юни 06, 2006 3:07 pm, променена общо 1 път
|
| Вто Юни 06, 2006 3:04 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Пич, що трябва да крещиш ? Има си документация като слънце, ама кой да я чете ....
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Юни 06, 2006 3:06 pm |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
Все пак се намираме в "Академията" и е добре да се обясни всичко нагледно и по най-простия начин. Понякога документацията не дава отговор на проблема ти, и тук идва ред на форумите, чиято цел е известна на всички. И не крещя 
|
| Вто Юни 06, 2006 3:12 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Ок, стори ми се че ти е надебелял нещо гласа 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Юни 06, 2006 3:16 pm |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Ами, да. Грешката е моя. Естествено че не трябва да инвертирам. Байта ми се инвертира два пъти - при предаване и приемане, което означава, че байта си ми е един и същи. МАКа съм го вързал правилно. Окъсих Т2Оут с Р2ИН и успях да приема това което съм изпратил. Проблемът се оказва в виртуалният КОМ който ползвам КОМПИМ. Точно къде му е проблемът сега ще видя. Някой ползвал ли го е? Възможно е да не рабори точно заради тази грешка и най-вероятно ще трябва да видя как да прочета статуса и да нулирам грешката. Отделен е въпроса каква е тази грешка и защо се появява.
п.с. Възможно ли е тази грешка да възниква защото в Уиндоуса при конфигурирането на КОМа по подразбиране е 9600, а аз искам комуникация с 10400? Вероятно затова се запълва ФИФОто и от там дава грешка. Сега ще го дам на 19200 и ще видим. За съжаление ми трябва 10400 а такъв битрейт немога да задам от конфигурацията на КОМа.
|
| Вто Юни 06, 2006 3:39 pm |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
Грешката и статуса, които споменахме по-горе са в пик-а, а след като си окъсил 2-та пина и програмата работи, значи няма грешки. Търси проблема във виртуалния порт или някъде другаде. А защо ти е такъв нестандартен битрейт? Според мен излишно си усложняваш живота 
|
| Вто Юни 06, 2006 3:48 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|