|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:19 am
| Автор |
Съобщение |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 SPI и CCP1 заедно ?
Здравейте ,
понеже ми трябва комуникация м/у два ПИК-а ( 18F458 ) , от рода на аз "питам - ти отговаряш" , мисля че I2C ще ми свърши работа НО , първо ми стана интересно как работи и реших да го правя с SPI .
На Slave имам и CCP1 вход който чете входящи импулси и се измерва периода/ честотата.
Също и TIMER1 , за времето .
Master-a през примерно 100 милисек. праща един или 2 байта и чака Slave-а да върне определен отговор . Slave -а използва прекъсване (SSP) за да чете какво праща Мастер-а.
Само комуникацията в този вид съм я направил и си работи чудесно .
Но ако включа и CCP1 -то , от време на време данните които си разменят двата ПИК-а се омазват . Примерно на 5 изпратени и приети , един е грешен .
Обяснявам си го с това че по време на комуникацията , идва прекъсване от CCP1 и се губи част от информацията , но дали съм прав ???
Когато Slave -а влезе в прекъсване при постъпили данни по SPI , забранявам всички други прекъсвания и след това го разрешавам , но пак не помага ?!
Slave - е със 16 Мhz , a Master-a със 20 Mhz кварц
Импулсите които меря със CCP1 са от порядъка на 0 - 200 Hz.
Забелявам че данните се омасват при повисоките честоти на CCP1, над 50 Hz.
Могат ли да не си пречат двата модула , т.е да има вярна комуникация по SPI , и какъв е трика да стане това ?
Aко е нужно сте пусна код ( CCS ) .
Бладодаря предварително за помоща , тъй като съм начинаещ и срещам доста трудности 
|
| Съб Ное 27, 2010 7:57 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Ми нали има USART тоя пик - що се мъчиш? Там можеш да си минеш на чисто хардуерно ниво без никаква външна намеса и си бачка.
|
| Съб Ное 27, 2010 9:19 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
Забравих за да спомена че хардуерния USART на МАСТЕР-а го ползвам за връзка към компютър
Но не съм много сигурен но мисля можеше да пусна втори - на други пинове ( софтуерен ) .
Дали не греша, и ще стане ли с 2 едновременно ?
Може би ще питате защо не пусна директно CPP модула на МАСТЕР-а
Мастера взима данни от РС -то и от Слейв-а . Освен това управлява няколко неща както и графичен LCD . Има няколко бутона . С данните от РС-то и от Слейв-а , пък смята доста други работи . Успях доста да го натоваря от към програмен код  паметта му е на 90 % пълна
Slave-a отчита честотата на импулсите и от нея ще се изчисляват доста други неща ( това още не съм го реализирал : ) ) .
Та остана този вариант , да разделя задачите на два процесора .
Последна промяна amdatlon на Съб Ное 27, 2010 9:43 pm, променена общо 1 път
|
| Съб Ное 27, 2010 9:29 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Софтуерения става само за пращане. За приемане не е удобен, щото нали се сещаш че не знаеш кога ще трябва да приемаш, а като почнеш да приемаш от него софтуерно, ще е много трудно да правиш каквото и да било друго.
|
| Съб Ное 27, 2010 9:39 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
Да де , и аз се опасявах че ще се бърка работата на другите процеси, но пък като съм сигурен дали наистина е така .... та за това питах .  .
Благодаря ти !
|
| Съб Ное 27, 2010 9:46 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Може би най-добре ще е да си реализираш някакъв софтуерен SPI откъм мастера. Така или иначе когато на мастера му трябват данните, ще му се наложи да си ги "поиска" и да си ги "клокне" сам. А CCP-то ще може да си работи с преъксванията си. А и синхронно може да постигнеш добра скорост - с други думи комуникацията ще е в птъи по-бърза отколкото по USARТ-а.
Аз съм правил такава комуникация ама 5-те слейва (12ф675) бяха на 4MHz а мастера на 20 и видях малко зор със синхронизацията. При това го правих с ChipSelect и слейва се подготвя да предава - е все пак не става като при хардуерните SPI устройства дето можеш да ги клокваш на 4-5 MHz.
|
| Съб Ное 27, 2010 11:43 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
Да и аз за това първо се насочих към SPI , заради доста по-високата скорост.
А иначе по въпроса ..... оказа се недоглеждане от моя страна
На Slave-а където задавам приоритетите на прекъсванията , заедно със SPI съм сложил CCP и TIMER1. Оставих само SPI , като с най-висок приоритет и нещата се оправиха
Тествах го до към 1000 Hz на CCP-то и нямаше омазване на данните .
Даже не влияе на измерената честота .
Много ти благодаря за отделеното внимание !
|
| Нед Ное 28, 2010 12:21 am |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
|
| Нед Ное 28, 2010 4:16 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Прав си е човекът. Ако си писал софтуерно приемане на SPI и си останал доволен от производителността, значи или си голям гений, или са ти много ниски изискванията. 
|
| Нед Ное 28, 2010 4:26 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
relsys : няма невъзможни неща. Има неща които не си заслужават гърча. Асинхронно приемане на данни софтуерно си е безсмислен гърч. Особено пък с тия мижави процесори.
Както и да е... Абе нали имаше пикове с 2 USART-a ... Верно че са с повечко крачета (TQFP), ама като трябва що да не се ползва и такъв.
|
| Нед Ное 28, 2010 4:56 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Въобще не са глупости. Ако можеш да напишеш софтуерен УАРТ в двупосочен режим, който да яде по малко от 50% от процесорното време при 9600, ще те призная за гении на пиковете
А колегата - ако не е късно, вземи си по голям процесор. Да си има 2/3 уарта и още толкова SPI и не се занимавай с глупости. 458 е античен процесор.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Ное 29, 2010 11:13 am |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 06, 2007 8:44 pm Мнения: 3175 Местоположение: Пловдив
|
Ако комуникацията не е много натоварена, няма проблем УАРТ-а да е софтуерен.
Относно предаването - проблем няма. Трябва таймер, който да генерира прекъсвания с едно битово време. И това прекъсване се генерира само докъто има нещо за предаване. Е, натоварва се проца, но пълно щасние няка.
Относно приемането - същия сценарий - При "-" фронта на старт бита на Rx се стартира таймер, който да генерира прекъсване в средата на битовото време. При това прекъсване се чете поредния бит. Слад стоповия бит - таймера се спира и не се генерират повече прекъсвания. И така до следващия "-" фронт на Старт бита.
Та при този сценарий с малък трафик през УАРТ-а средното използване на проца за комуникация може да е значително под 50%.
Има и разни изгъзици с Оутпут къмпеара и използването на хардуерното му ФИФО. Така е възможно да се направи по-оптимално предаване по УАРТ-а без прекъсвания на всеки бит.
Е, при тези непрекъснато поевтиняващи процесори - по-добре да се избере такъв с 2 УАРТ-а и човек да не се занимава с глупости ... Въпрос на компромис с цената разбира се 
|
| Пон Ное 29, 2010 11:35 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ненатоварен интерфейс е много относително понятие. За да е работоспособен един интерфейс трябва да може да поеме 100% натоварване. Т.е. ако работиш на 9600 - в най-тежкия случай трябва да си тече стрим поток на предаване и стрим поток на приемане. Т.е. данните спират само колкото за стоп-старт битове и текат непрекъснато. И през това време да ти върви останалия софтуер и да му оставиш минимум 20Мхз образно казано.
Пробвал съм се с подобни глупости и на 9600 е пълен мазохизъм, а кода заприличва на кадаиф. Ама бях объркал една серия платки.... Накрая се отказах и платих направата на нова серия платки (щото грешката беше моя).
Пък и както казах, на пазара е пълно с процесори с 2+ уарта, дето са по евтини от 458-цата. Който скоро може и да няма от къде да се купи.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Ное 29, 2010 3:28 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
Ами ето какво съм сътворил за Н8 при клок 18 MHz, реална скорост на изпълнение на кода около 4-5 MHz. Доколкото си спомням при тестването отхапваше по-малко от 25-30% на процесора.
За 9600, прекъсване на 52 us:
и съответно функциите за четене и запис:
PS: Не че мен ме кефят такива извратени неща, но в случая просто се наложи. Дори на 9600 нещо не се стикова добре с останалия софтуер /който не е писан от мен/ но на 4800 и 2400 нямаше никакви забележки. Пък после го сменихме с I2C. Та така...
|
| Пон Ное 29, 2010 5:11 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
да де и аз така. Правих го, уж трябваше да работи, ама му нямах вяра.....
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Ное 29, 2010 6:09 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|