|
PIC18F4550 не работает |
|
|
|
Nov 26 2009, 15:42
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 21-11-08
Из: BELARUS
Пользователь №: 41 837

|
Доброго всем времени суток.... У меня возникла проблема с "простой" схемкой... Использую PIC18F4550, задума простее некуда: при запуске изначально все пины PORTD в состоянии 01010101, при появлении сигнала на RB6 состояния меняються следующим образом 10101010... Соответственно програма простее некуда: LIST P=18F4550, F=INHX32, r=dec #include <P18F4550.INC> CONFIG FOSC = HS main: clrf PORTB clrf PORTD movlw b'11111111' movwf TRISB movlw b'11111111' movwf TRISB LOOP: btfsc PORTB,6 goto true goto false true: movlw b'10101010' movwf PORTD goto LOOP false: movlw b'01010101' movwf PORTD goto LOOP END В отладчике все работает, а вот на практике, даже не дышет... Подскажите что здесь не так, схема не верна или в програме ошибка??? Ниже прикреплена схема...
|
|
|
|
|
Nov 26 2009, 17:56
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 21-11-08
Из: BELARUS
Пользователь №: 41 837

|
А, нет, ошибся  , 20pF каждый....
|
|
|
|
Guest_@Ark_*
|
Nov 26 2009, 20:52
|
Guests

|
Цитата ... Подскажите что здесь не так, схема не верна или в програме ошибка??? Похоже, и то, и другое... По программе: - нужно переключить порт D на выход, если хотите что-то туда выводить. Записать нули в соотв. биты TRISD. В данном случае - во все. По схеме: - Вывод RB6 нужно подтянуть к земле резистором (1-10К), если вы замыкаете кнопку на питание. Иначе, при ненажатой кнопке, на RB6 будет непонятно какой (плавающий) потенциал. Кстати, обычно делают наоборот - подтягивают резистором к питанию, а замыкают кнопкой на землю. - Вывод MCLR нужно подтягивать к питанию, а не к земле. Если используете внутрисхемное программирование, то номинал резистора нужно увеличить до 5-10К. - Светодиоды, также, лучше подключить общей точкой к питанию, а не к земле. Соответственно, развернув их, и включать подачей не 1, а 0. - Вообще-то, не рекомендуется подключать всю нагрузку к одному порту (тем более, когда есть выбор). Можно превысить допустимый суммарный ток для порта (см. даташит). - На питание пика, как правило, ставят два конденсатора: электролитический - емкостью в несколько единиц и десятков микрофарад, и керамический - порядка 0,1 мкф, поближе к выводам Vdd и Vss. - Рекомендуемые номиналы конденсаторов для кварца нужно смотреть в ДШ...
|
|
|
|
|
Nov 29 2009, 09:37
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 21-11-08
Из: BELARUS
Пользователь №: 41 837

|
На кварц так и написано по 20pF каждый... А не могли бы вы уточнить насчот питания (использую импульсный источник питания), номиналы кондеров: скажем если электролит 20 микрофорад ну и керамику 0.3 микрофарада, подойдет???
|
|
|
|
|
Dec 1 2009, 07:50
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 21-11-08
Из: BELARUS
Пользователь №: 41 837

|
Добрый день еще раз.... Я немного переделал проект следующим образом: по прерыванию от любого из портов (RB0-RB2), меняеться состояние портов RD0-7 (т.е. когда на какомто RB0-RB2 true, то и на RD0-7 true, когда на RB0-RB2 false, то и на RD0-7 false), в отладчике все отлично работает НО НА ПРАКТИКЕ ПО ПРЕЖНЕМУ НИЧЕГО.... По вашим советам я изменил схему, но никаких изменений (признаков жизни)... ЧТО Я ЕЩЕ НЕ ТАК СДЕЛАЛ..... Програма: LIST P=18F4550, F=INHX32,r=dec ;directive to define processor #include <P18F4550.INC> ;processor specific variable definitions ;****************************************************************************** ;Configuration bits CONFIG FOSC = HS ;HS oscillator, HS used by USB ;****************************************************************************** ;Variable definitions ds_temp equ 0xdd UDATA WREG_TEMP RES 1 ;variable in RAM for context saving STATUS_TEMP RES 1 ;variable in RAM for context saving BSR_TEMP RES 1 ;variable in RAM for context saving UDATA_ACS EXAMPLE RES 1 ;example of a variable in access RAM ;****************************************************************************** ;EEPROM data DATA_EEPROM CODE 0xf00000 DE "Test Data",0,1,2,3,4,5 ;****************************************************************************** ;Reset vector RESET_VECTOR CODE 0x0000 goto Main ;go to start of main code ;****************************************************************************** ;High priority interrupt vector HI_INT_VECTOR CODE 0x0008 bra HighInt ;go to high priority interrupt routine ;****************************************************************************** ;Low priority interrupt vector and routine LOW_INT_VECTOR CODE 0x0018 bra LowInt ;go to low priority interrupt routine ;****************************************************************************** ;High priority interrupt routine CODE HighInt: btfss PORTB,2 goto next2 bcf INTCON3,1 bcf INTCON2,4 bsf ds_temp,0 retfie FAST next2: btfss PORTB,1 goto next1 bcf INTCON3,0 bcf INTCON2,5 bsf ds_temp,0 retfie FAST next1: btfss PORTB,0 goto next0 bcf INTCON,1 bcf INTCON2,6 bsf ds_temp,0 retfie FAST next0: bcf INTCON3,0 bsf INTCON2,5 bcf INTCON3,1 bsf INTCON2,4 bcf INTCON,1 bsf INTCON2,6 bcf ds_temp,0 retfie FAST ;****************************************************************************** ;Low priority interrupt routine LowInt: movff STATUS,STATUS_TEMP ;save STATUS register movff WREG,WREG_TEMP ;save working register movff BSR,BSR_TEMP ;save BSR register ; *** low priority interrupt code goes here *** movff BSR_TEMP,BSR ;restore BSR register movff WREG_TEMP,WREG ;restore working register movff STATUS_TEMP,STATUS ;restore STATUS register retfie ;****************************************************************************** ;Start of main program Main: ; Interrypt bsf RCON,7 bsf INTCON,7 bsf INTCON,4 bsf INTCON2,0 bsf INTCON2,1 bsf INTCON2,2 bsf INTCON2,5 bsf INTCON2,4 bsf INTCON3,6 bsf INTCON3,7 bsf INTCON3,4 bsf INTCON3,3 ;Set PORTs bcf T0CON,7 bsf T0CON,6 bcf T0CON,5 bcf T0CON,3 bcf T0CON,2 bcf T0CON,1 bcf T0CON,0 bcf INTCON,5 clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE movlw 0x07 movwf ADCON1 movlw 0x07 movwf CMCON movlw b'00000111' movwf TRISB ;Inpyt interrypt 0,1,2 movlw b'11111111' movwf TRISA ; movlw b'11111111' movwf TRISC ; movlw 0x0; movwf TRISD ;If interrypt true or false set states of bits movlw b'00000000' movwf TRISE clrf ds_temp; loop: btfsc ds_temp,0 goto true goto false true: movlw 0xff; movwf PORTD goto loop false: movlw 0x00; movwf PORTD goto loop ;****************************************************************************** ;End of program END Схема:
|
|
|
|
Guest_@Ark_*
|
Dec 1 2009, 08:28
|
Guests

|
Цитата Добрый день еще раз.... Я немного переделал проект следующим образом: .... ЧТО Я ЕЩЕ НЕ ТАК СДЕЛАЛ..... Вы начали усложнять программу, так и не добившись работоспособности первого варианта. Это не правильно. Нужно вернуться к первоначальной, простой версии вашей программы, и, для начала, заставить работать ее. Пока эту задачку не решите (на реальной схеме, а не в отладчике!) - двигаться дальше нет смысла... Последний вариант схемы подойдет. Поменяете только в исходной версии программы RB6 на RB0, например, чтобы не переделывать схему. Проверьте все ли биты конфигурации выставлены правильно при прошивке. Посмотрите осциллографом генерит ли кварц...
|
|
|
|
|
Dec 1 2009, 10:48
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 21-11-08
Из: BELARUS
Пользователь №: 41 837

|
Кварц генерит, проверил осциллографам... WDT отключон.... Меня смущает вот что, кондеры на кварц по 20пФ я взял не новые а выпоял из платы, если быть точнее то один по замерам гдето 18 пФ, а другой 19.5пФ (но кварц та генерит)... На сколько я знаю ето не критично, кварц та генерит, вот только значение частоты не посмотрел (осцилограф не позваляет)... Может в етом проблема...
|
|
|
|
Guest_@Ark_*
|
Dec 1 2009, 11:05
|
Guests

|
Вы, лучше, упростите программу до предела, как Вам Herz советует, и добейтесь, чтобы она заработала. Вот примерно так, хотя бы:
LIST P=18F4550, F=INHX32, r=dec #include <P18F4550.INC> CONFIG FOSC = HS main: clrf PORTD movlw b'00000000' movwf TRISD movlw b'11111111' movwf PORTD LOOP: goto LOOP END
Если заработает, то все светодиоды должны зажечься, согласно вашей схеме. Разберитесь со значеними всех битов конфигурации по даташиту и установите нужные значения. Часто забывают отключить WDT, режим низковольтного программирования и режим отладчика. P.S. Чем прошиваете-то?
|
|
|
|
|
Dec 1 2009, 15:44
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 21-11-08
Из: BELARUS
Пользователь №: 41 837

|
Прошиваю програматором "Phyton ChipProgUSB"... Я в курсе про все биты конфигурации
|
|
|
|
|
Dec 15 2009, 21:04
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 21-11-08
Из: BELARUS
Пользователь №: 41 837

|
Здравствуйте госпада.... Продолжаю сражаться с микрокантролером... На сей раз дособрал схему для работы по USB шине, но снова проблема, не осуществляеться подключение к компу (при подключении шнура вообще никаких признаков, ни неопознанных оборудований ничего).... В чом еще может быть проблема.... Вот схема...
Сообщение отредактировал mustelus - Dec 15 2009, 21:12
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|