Отговори на тема  [ 43 мнения ]  Отиди на страница Предишна  1, 2, 3
Предаване и приемане по RS232 в CCS. Как? 
Автор Съобщение
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Нед Мар 27, 2005 12:40 am
Мнения: 206
Местоположение: София
Мнение 
Цитат:
Грешката и статуса, които споменахме по-горе са в пик-а, а след като си окъсил 2-та пина и програмата работи, значи няма грешки. Търси проблема във виртуалния порт или някъде другаде.

Натам отиват нещата вече. Програмката си е наред, а виртуалният ком на Протеуса ми създава проблеми с настройката. Затова попитах дали някой го е ползвал, за да даде акъл как да го настроя.
Цитат:
А защо ти е такъв нестандартен битрейт? Според мен излишно си усложняваш живота

Това е въпроса :) . Защото тази комуникация е част от друга задачка и по-точно от задачката за борд-компютъра (раздел ЕКУ). Та моето ЕКУ комуникира с тази скорост и затова се налага да подкарам всичко по този начин. Затова ми трябва и виртуалния ком на Протеуса, защото на реалния КОМ ще вържа модемчето което съм направил и което ще комуникира с ЕКУто на колата :) .


Вто Юни 06, 2006 4:05 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Май 23, 2006 4:56 pm
Мнения: 113
Местоположение: Варна
Мнение 
Ако правилно съм те разбрал, твоя модем ще стои между борд-компа и настолния компютър. Ако е така направи си комуникацията с борд-компа на 10400, а с РС-то на 19200 или 9600. А докато си тестваш програмата си ползвай стандартни стойности на битрейта, и когато всичко е готово си го смени на колкото ти трябва.


Вто Юни 06, 2006 4:09 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Нед Мар 27, 2005 12:40 am
Мнения: 206
Местоположение: София
Мнение 
Цитат:
Ако правилно съм те разбрал, твоя модем ще стои между борд-компа и настолния компютър.

Не точно. Модемът е между ЕКУто на колата и борд-компютъра (моя контролер - горе схемата). Това което симулирам на Протеус е моя контролер или бъдещия борд-компютър :) . Затова ми е важно в Протеус да симулирам борд-компа и го връзвам по този начин с модема, който ми е на реалния КОМ на ПСто. т.е идеята ми е в случая с Протеуса да опитам да се вържа с ЕКУто и по модема да си гукам между двете у-ва. Затова ми е важно да пусна този виртуален КОМ на Протеуса.


Вто Юни 06, 2006 5:14 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
daniel_stefanov написа:
Цитат:
Ако правилно съм те разбрал, твоя модем ще стои между борд-компа и настолния компютър.

Не точно. Модемът е между ЕКУто на колата и борд-компютъра (моя контролер - горе схемата). Това което симулирам на Протеус е моя контролер или бъдещия борд-компютър :) . Затова ми е важно в Протеус да симулирам борд-компа и го връзвам по този начин с модема, който ми е на реалния КОМ на ПСто. т.е идеята ми е в случая с Протеуса да опитам да се вържа с ЕКУто и по модема да си гукам между двете у-ва. Затова ми е важно да пусна този виртуален КОМ на Протеуса.


Няма да стане !!
По добре си налепи една платка с тоз процесор и само чети данни с компа .Защото при по бавен комп има разминаване между реално време и времето на симулацията .Затова моя съвет е да си налепиш едно 40 пина цокълче да му сложиш едно максче ,нямяа нужда засега да слагаш дисплей защото то е еквивалентно на четене
през рс-а и си прави опитите.


Сря Юни 07, 2006 9:25 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
@daniel_stefanov
За последно да се обадя :)
Както ти казах обърнал си след макса нещата ,загледай и ще
видиш ,че връзваш TX с TX и RX и RX !
Тази връзка трябва да е кръстосана Tx с Rx и Rx с Tx
Едното е вход а другото изход все пак 8)


Сря Юни 07, 2006 10:05 am
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Нед Мар 27, 2005 12:40 am
Мнения: 206
Местоположение: София
Мнение 
Цитат:
Няма да стане !!
По добре си налепи една платка с тоз процесор и само чети данни с компа .Защото при по бавен комп има разминаване между реално време и времето на симулацията .Затова моя съвет е да си налепиш едно 40 пина цокълче да му сложиш едно максче ,нямяа нужда засега да слагаш дисплей защото то е еквивалентно на четене
през рс-а и си прави опитите.

Ами така мисля да направя, но ще сложа и дислпей за да виждам какво чета :D Изгубих си доста време с този Протеус а и този виртуален КОМ нещо неработи добре.

Цитат:
@daniel_stefanov
За последно да се обадя
Както ти казах обърнал си след макса нещата ,загледай и ще
видиш ,че връзваш TX с TX и RX и RX !
Тази връзка трябва да е кръстосана Tx с Rx и Rx с Tx
Едното е вход а другото изход все пак


Първоначално го бях направил така както ти пишеш, но така пък изобщо не стана комуникацията. Искам да кажа, че знаеш когато има комуникация при този виртуален КОМ точките (пиновете) светят в червено. По този начин Tx с Rx и Rx с Tx те изобщо не светят. Когато ги свързах TX с TX и RX и RX , TX ми свети, а RX не. Тогава помислих, че така трябва да се върже и оттогава съм така. В примерчето което е дадено в Протеуса също е вързано така, но там с терминал. Това е причината да мисля, че това е правилния начин на връзване.
Затова моля ако на някой му се е налагало да прави подобно нещо да драсне една схемка и да обясни как е докарал комуникация.
Цитат:
За последно да се обадя

Иначе ми е приятно да се обаждаш и надявам се да продължиш да помагаш :) Поздрави


Сря Юни 07, 2006 2:00 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Нед Мар 27, 2005 12:40 am
Мнения: 206
Местоположение: София
Мнение 
Горният проблем още не е решен и вече имам нов, който е свързан с тази задачка :) . Та въпросът е как мога да използвам PIN_C6 и PIN_C7 преди да съм инициализирал rs232? Идеята, е че трябва да събудя ЕКУто в 5 бода в секунда и след това комуникацията е на 9600, което означава, че ръчно трябва да "клатя" PIN_C6 преди да пусна УСАРТа. Опитах така, но не стана:
#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
//#use fixed_io(c_outputs=pin_C6) //speeds up port use
#use delay(clock=20000000)
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#include <lcd.c>

char c;
int res;

void wake_ECU(void)
{
output_high (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_high (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_low (PIN_C6);
Delay_ms(200);
output_high (PIN_C6);
}

void main() {

lcd_init();
wake_ECU();
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

while(TRUE) {
putc(1);
Delay_ms(10);
res=getc();
Delay_ms(200);
printf(lcd_putc,"\f\rres= %1.2U", res);
}

}


Чет Юни 08, 2006 12:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
А някъде зададено ли е на порта, че ще е изход - т.е. TRISC,6 = 0;? Не ползвам CCS и можеби греша!?


Чет Юни 08, 2006 2:25 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Нед Мар 27, 2005 12:40 am
Мнения: 206
Местоположение: София
Мнение 
Всичко това си го прави функцията output_high () или output_low (). Поне се убедих в това, защото като сложа //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) всичко е ОК. Пиновете ми се превключват през 200мс. Лощото, е че където и да дефинирам серийният порт все се омазват нещата. Явно компилатора види ли #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7), където и да е поставено в програмата резервира винаги тези пинове. Моля, кажете дали е така? Ако е така, как да използвам тези пинове, преди да инициализирам и ползвам rs232?


Чет Юни 08, 2006 2:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Функциите Output_high/low работят, без да си пипал TRISx регистрите, обаче виж в листинга, че на всяко извикване на тези функции изразходват 6 програмни думи. Направи си дадените пинове изходи/входове чрез TRISx регистрите, след това си дефинирай чрез #bit пиновете и работи директно с пиновете.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Чет Юни 08, 2006 3:08 pm
Профил WWW
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Нед Мар 27, 2005 12:40 am
Мнения: 206
Местоположение: София
Мнение 
Опитах и това. Отново не става. Както забраня инициализацията //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7), всичко се оправя. RC6 и RC7 си ги превключвам както си искам, сложа ли #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) всичко се успива. Не е възможно да не могат да се ползват RC6 и RC7 преди да се разреши работата с КОМа. Имате ли идеи от къде може да е проблема? Къде да поставя #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) в тялото на програмата, за да мога преди това да превключвам RC6 и RC7, след това тези пинове да си работят като предавател и приемник с инициализирането на УСАРТа?


Чет Юни 08, 2006 6:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
daniel_stefanov написа:
Проблемът се оказва в виртуалният КОМ който ползвам КОМПИМ. Точно къде му е проблемът сега ще видя. Някой ползвал ли го е? ....


Тоя виртуален COM ти изкарва 5V нива, считай все едно има MAX232 в него, затова не му се закача MAX232 за разлика от истинския - закачаш му пиновете директно към проца. Уверявам те, нищо му няма на виртуалния COM, ползвам го често, за времената на реакция също мога да поспоря, използва се FIFO-то на хардуера - 16KB 8)

А на горния ти въпрос за инициализация на RS232, ми няма да можеш да човъркаш по RC6 и RC7 след като си инициализирал UART-a хардуерно, в по-новите версии на CCS има добавен директив, който можеш да ползваш - FORCE_SW :
Код:
#use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,FORCE_SW)

Ако ползваш софтуерен UART, можеш да човъркаш колкото си искаш по RC6 и RC7

PS: в тая Mikroelektronika освен Auto Complete функцията на IDE-то друго хубаво не видях... :wink: За сравнение, CCS с малко играчка може да се интегрира с Visual Studio както и с Programmer's Notepad


Чет Юни 08, 2006 7:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Като искаш да използваш #use rs232 и да бъзикаш пиновете на RxD & TxD, тогава забраняваш USART с RCSTA.7 ( SPEN bit ), после за всеки случай след бъзикнята, сложи ново #use , за да го инициализира нанова. Най-добре заеби тия #use и си пиши директно в регистрите. При предаване пишеш в TXREG, при приемане четеш от RCREG, имаш и 2-3 реда инициализация на регистри.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Чет Юни 08, 2006 8:38 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 43 мнения ]  Отиди на страница Предишна  1, 2, 3

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни