| Автор |
Съобщение |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
 Управление на MCP42100 с PIC16F84A
Здравейте , от доста време се опитвам да управлявам програмируемия потенциометър на Микрочип с пик-а.
Изводите на потенциометъра са включени като делител ,
а с измервателния уред измервам все едно и също показание.
Поогледах внимателно командите , които изпращам и не забелязах грешка. Какво ли може да става ?
|
| Вто Дек 14, 2004 1:35 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Дай да видим програмата ти. Доколкото помня трабваше да се прати 0х00 преди желаната стойност
_________________ Adios
Mozfet
|
| Вто Дек 14, 2004 1:54 pm |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
;********************* DEFINE I/O PINS **********************
#define SCK PORTB,3
#define SI PORTB,2
#define CS PORTB,1
#define RS PORTB,0
;------------------------------------------------------------
Write_0 bcf SI
bsf SCK
bcf SCK
return
;------------------------------------------------------------
Write_1 bsf SI
bsf SCK
bcf SCK
return
;------------------------------------------------------------
Send_Comand movlw B'11011111'
movwf Comand_Reg
movlw D'8'
movwf Counter
refresh_1 RLF Comand_Reg,f
btfss STATUS,C
call Write_0
btfsc STATUS,C
call Write_1
decfsz Counter,f
goto refresh_1
return
;------------------------------------------------------------
Send_Data movlw D'8'
movwf Counter
refresh RLF Reg_Data,f
btfss STATUS,C
call Write_0
btfsc STATUS,C
call Write_1
decfsz Counter,f
goto refresh
return
;------------------------------------------------------------
main bcf SCK
bcf CS
movlw D'50'
movwf Reg_Data
call Send_Comand
call Send_Data
sleep_1 nop
goto sleep_1
END
На входа SHDN е подадено постоянно неактивно ниво "1"!
|
| Вто Дек 14, 2004 3:30 pm |
|
 |
|
Гост
|
Âïðî÷åì íå íàìåðèõ â äàòàøèéòà îïèñàíèå íà òðàíñôåðà íà äàííè ò.å äàëè äàííèòå ñå ïðåäàâàò îò íàé-ìëàäøèÿ áèò èëè îáðàòíî?
|
| Чет Дек 23, 2004 2:21 pm |
|
 |
|
Wise
Ранг: Форумен бог
Регистриран на: Нед Дек 19, 2004 6:26 pm Мнения: 1628 Местоположение: Сливен
|
Пробва ли да сложиш няколко "nop" между "bcf SCK" и "bsf SCK" и обратно?
смътно си спомням за подобен проблем с портовете - наложи се по-бавно да ги клатя
И да не си забравил да ги дефинираш като изходи
|
| Чет Дек 23, 2004 3:48 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Здр.
При Spi се предава първо най-старшия бит.
Пробвай да сложиш BSF CS след call Send_Data.
_________________ Adios
Mozfet
|
| Чет Дек 23, 2004 5:39 pm |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
 Значи...
Действително предаването на данни започва от най-старшия бит. В даташийта са дадени времена на продължителност на импулса от порядъка на 150nS , при мен честотата е 4МНц и
съответно периода 1uS така , че мисля проблема да не е от там. Подкарах го до някаде , НО става така , че :
- нулирам регистъра с данни и го изпращам , след това измервам с уреда делителя , който съм реализирал и изхода е нула /до тук добре/.
- увеличавам данните с единица , а в изхода вече имам половината напрежение от делителя , при следващите три инкрементирания на регистъра отивам до захранващото напрежение на делителя /а потенциометъра е на 256 нива???/.
- при следващо инкрементиране в средната точка от делителя пак имам нула и всичко пак започва от начало , а стойността на регистъра е само 5 или 6.
Колкото до "bsf CS" с неговото нулиране се изпращат контролния регистър и този за данни и след това се вдига в единица т.е трябва да са минали 16 такта /това го бях пропуснал/ !
|
| Пон Дек 27, 2004 10:22 am |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
 STOP
Сега вече тръгна. Имах една логическа грешка и на дебъгера веднага лъсна. Единствения пропуск беше "bsf CS" след изпращането на данни. Благодаря за мненията!
|
| Пон Дек 27, 2004 1:33 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Пак заповядай
Имаш възможност малко да оптимизираш кода. Ако се обръщаш към една и съща подпрограма "Send_byte" за Command_byte и Data_byte ще спестиш около 10 реда асемблер.
_________________ Adios
Mozfet
|
| Пон Дек 27, 2004 3:15 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Извинявам се за намесата, ама мога ли да си сложа такива потенциометри на усилвателя, вместо оригиналните механични? 
|
| Пон Дек 27, 2004 4:26 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
що да не можеш, лепи и програмирай 
|
| Пон Дек 27, 2004 5:16 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
изкривявания
|
| Пон Дек 27, 2004 5:40 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
А има и някои дето мног гадно препукват като сменят стойността си ......т.е. те не препукват, а усилвател с тях препуква ..... 
|
| Пон Дек 27, 2004 6:42 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Цифровите пот имат съпротивление на Wiper 50-150 ома(завсиси за какво съпр. ти е пот-а) . Т.е. не можеш да получиш 0 ома, винаги ще имаш най-малко 50 .
MCP4xxxx за звук не стават.
_________________ Adios
Mozfet
|
| Пон Дек 27, 2004 6:50 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Гадост. А кои стават? 
|
| Пон Дек 27, 2004 6:59 pm |
|
|