Отговори на тема  [ 74 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5
PIC - More InputS are needed :) 
Автор Съобщение
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
Pirev на ПИКА каде му е вектора на прекъсванията на кой адрес като си почнал от ORG 0x000 ще свърши InitHardware ? затова става дума


ORG 0x0000

InitHardware:
clrf STATUS
clrf INTCON
movlw 0x09 ; Reset = 1, Clock = 0, Store = 0, Load = 1
movwf PORTA
clrf PORTB ; PORTB = 0;
bsf STATUS,RP0
movlw 0x20
movwf TRISA
movlw 0x00
movwf TRISB
bcf STATUS,RP0


Пет Окт 28, 2005 11:50 am
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
Тhe_real_maniac,RA4 е незаменим когато трябва да превключваш нещо с по голямо напрежение от Vcc на PICa например реленце на 12в. е ртябва да се съобразиш с товароспособноста на изхода де 20-30мА.
А в случая не става като изход не за друго а защото ти трябват остри фронтове на превключване а входа на HC серията е все пак един кондензатор (вход на полеви транзистор) и за да направиш остър фронт ти трябва нискоомнен pull-up който пък ще товари излишно изхода на open-drain транзистора на RA4


Пет Окт 28, 2005 12:09 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Много си се задълбочил :D На човека му трябваше начин да подкара 74HC597, не да пише вектори на прекъсване. Може и обратното да попитам: ами ако не ползва прекъсвания, защо да прави излишно гото от 0 към InitHardware ? Приемам все пак критиката.

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


Пет Окт 28, 2005 2:43 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
VSU написа:
Тhe_real_maniac,RA4 е незаменим когато трябва да превключваш нещо с по голямо напрежение от Vcc на PICa например реленце на 12в. е ртябва да се съобразиш с товароспособноста на изхода де 20-30мА.
А в случая не става като изход не за друго а защото ти трябват остри фронтове на превключване а входа на HC серията е все пак един кондензатор (вход на полеви транзистор) и за да направиш остър фронт ти трябва нискоомнен pull-up който пък ще товари излишно изхода на open-drain транзистора на RA4


Ако може да развием Мааалко темата ;)

Защо бих предпочел да ползвам 12в реленце, вместо 5волтово :? примерно !?.

pirev: не спирай човека , щом иска да каже :) Всяка информация е добре дошла :D

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Окт 28, 2005 3:34 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
:) ми защото ти се налага, такова има, такова трябва да е.... а може и да не е реле, може да искаш да управляваш транзистор мощен, и 5 V примерно ще са малко за някоя за да се отпушат напълно, или пъ няма да стигат з запушването на PNP или Р канален. Има мнго случаи когато се нлага изпозлване на изходи с OD.


Пет Окт 28, 2005 6:17 pm
Профил
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
the_real_maniac заеби реленцето дадох го като пример (може би не много удачен ама принципа е важен ) ти кажи по добре подкара ли регистъра :D Пирев репликата я направих щото някой от начинаещите може да реши да ползва наготово кода ти и като се омаже програмата му ще има пак едни постове ама то не ми работи таймера помощ АЦПто ми не мери и т.н. сещаш се де :D


Пет Окт 28, 2005 11:07 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение RA4 ??
Не съм се запознавал в детайли със характеристиките , но найстина ли RA4 ще издържи 12 В , че и повече !!!??????
Винаги съм се чудел защо тия от Майкрочип са го плъоснали така недоклатено тоя порт , а то какъв бил замисълът !!!??!! :roll:


Съб Окт 29, 2005 12:28 am
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
RA4 open-drain по DC характеристиките ма Microchip е до 8.5-9 волта максимално напрежение аз съм го ползвал на 12В. и работи без проблем ама да не прекаляваме по-нагоре все пак ПИК е не се знае каде ще се получи гафа :P


Съб Окт 29, 2005 1:06 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Абе простичка работа, изход като всички останали, само дето са махнали горния транзистор. На практика ми е държал 30мА, много удобно за управление на биполярни транзистори, даже често ми се е налагало повече пинове като този :)


Съб Окт 29, 2005 4:09 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение 
Значи спокойно мога да си пусна едно реле на 12 В през него ??

_________________
Сичкото що е транзистор за илядо и пестотин волта се е BU ...


Пон Окт 31, 2005 12:38 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
:D Не чак много спокойно...


Пон Окт 31, 2005 1:46 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Тръгна (че къде ще ходи :P).

Здравейте , не писах в тази тема , въпреки достата внимание поради простата причина , че точно когато тук се развихри пак дискусия аз си имах други неща на главата - кои маловажни, кои малко важни , та ...

Какво се оказа, е днес най-сетне го преборих , всъщност аз се САМОпреборих.

Що всички Вие да Ви питам си мълчите , А ? Защо не казвате на начинаещия , че PIC16x (както и 12x) не поддържа директни операции с WREG !?. А ? Хем и програмката си дадох , макар и с грешки от това да я направя по-хубава (прегледна и прочие). :lol:

Та сериозно:

в мойта програма , тъй като просто беше за тест взимаше един shiftreg състоянието му и бам в PORTB.
И си викам да си ползвам W(REG). И си го ползвам , ама друг път :lol: Как точно го установих, ами с помощта на PIC SIMULATOR IDE (макар , че можех и по други начини, но там ми изкочи пред очите проблема).
Абе почнах аз стъпка по стъка и със microcontroler view и гледам на breakpoint manager-a , по-едно време няква инструкция и INDF като рег и се плеща на среща :) И като се огледах , ми то където трбява да ми е WREG. И после си направих една програма 3 реда clrf, bsf , rlf WREG и видях , че нищо не става всъщност.
Тогава се борих с гуглето и keywords, в крайна сметка към 3-та страница ми излезе задоволително попадение (потвърждението , което търсех).

Форумче подобно на нешето и човека иска като мен bsf / bcf + rlf да ползва директно на WREG , но не работи. И човека също като мене си мисли , че проблема е в него :) А се оказва , че PIC12/16x не поддържат тези директни операция. clrf WREG е всъщност movlw 0x00 , та тъй.

После имах един физ. проблем , когато не са вързани входовете на 597 си менят състоянието като луди ей ... заради това повече от 1 час се чудя какво може да съм объркал в програмата, като вече я научих на изуст със opcodeS ... абе мани :- ))) :)

Та ето прилагам една снимчица на моята тестова платка , много е весела знам :D Ама работи :P 8)

Powered by real_mania for gadgets :mrgreen:

едит: мдааа не се вижда хубаво, утре ще направя една снимчица като хората с CX65, просто тея хвърчащи кабели + това , че работи (колкото и просто да е то, но измъчено беше) ме радва в момента много :)

edit2: ама съм заплес. Благодаря Ви много за времето , което отделихте на темата !


Прикачени файлове:
Коментар на файл: модула към основната тестова платка :)
MAX232N (2xRS232) + 1xDIP16 IC (74HCT597 в случея). Не се вижда добре женските рейки чрез които се прави връзката на живо излгежда по-весело :D

snap-unknown-20051104-012705-1.jpeg
snap-unknown-20051104-012705-1.jpeg [ 45.38 KiB | Прегледано 4581 пъти ]
Коментар на файл: Правена с WebCam (IC -> OV511).
картината може и много по-добре, но трябват настройки и хубаво осветление :)

snap-unknown-20051104-012750-1.jpeg
snap-unknown-20051104-012750-1.jpeg [ 50.48 KiB | Прегледано 4581 пъти ]

_________________
един факт :-)
Съжалявам , че исках да помогна ...
Пет Ное 04, 2005 2:36 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Що не постнеш подпрограмата за четене на 74hc597 ? Тия дни мисля да го използвам ....
bsf,bcf и т.н. върху WREG не работят, всъщност работят, но използват индиректната адресация, т.е. ще направиш bsf но в регистъра, чийто адрес е зареден в FSR регистъра.
Код:
   movlw   0xFF
   movwf   test_register
   movlw   test_register   ; Зареждаш адреса на test_register в FSR
   movwf   FSR
   bcf   W,0      ; не нулираш бит 0 в WREG, а нулираш бит 0 в test_register
   bcf   W,1      ; не нулираш бит 1 в WREG, а нулираш бит 1 в test_register


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


Пет Ное 04, 2005 3:00 am
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Честно да ти кажа това за индиректната адресация така и не съм се задълбочавал , нито съм го ползвал - с една дума не го разбирам (за момента).

Относно подпрограмата проблем нямаш. :)

Обаче относно самия shift register трябва да обсъдим нещо.

М/у 74HCT166 и 597 разликата е в flip-flops , които в крайна сметка се оказаха , че значат просто тригери.
Така, виж долу таблицата с режимите на 597. Ще видиш два режима за пренасяне на данните в самия shift reg.
И въпроса е кой е по-добре да се ползва (и по-точно как да си сигурен , че ползваш него). Знам, че сега ти звучи малко объркано , но сега ще ти обясня логиката ми и ще дам малко изводи/обяснения.

1-начин: директно от inputs -> shift reg.

PL = L , MR=H , STcp = ^ (L to H transition) , SHcp = X (don't care)

2-начин: от inputs -> latches и от latches в shift reg-a.

inputs -> latches: PL = X, MR=X, STcp = ^ , SHcp = X
latchs -> shiftreg: PL=L, MR=H, STcp= X , SHcp = X
----------------------

Какво е специфичното при реализирането на 1 или 2. Да не стане искаш 2 , пък ползваш 1. Защо ? Ами много лесно може да се объркаш. виж първия начин и виж 1-вото действие на 2-рият начин.

Както виждаш inputs -> latches не го грее какво ниво има всичко остнало стига смао да има един такт/импулс на STcp (L to H). Обаче по първият начин , ако имаш STcp (L to H) + PL=L + MR=H ще напарвиш пренасяне на инф. от входовоете към shift reg-a . Т.е ако искаш да ползваш 2-рия начин не трябва да имаш PL=L и MR=H едновременно и тъй като MR=L има два случея спрямо PL:
- = L , което е невалидно състояние , не се знае какво ще стане.
- = H, което е ресет на регистъра.

временно само за първото действие от 2 ще вдигнеш PL = H, а MR си остава = H. След това просто си правиш един такт с STcp (и получаваш inputs -> latches). И така объркване няма да има.

Долу ще напиша и двете разновидности на ползване.

Сега обаче имам и едно питане:

В моя случей ми трябва 1-вия вариант мисля, директното inputs -> shiftreg (защото ще проверявам дали дадено нещо е в състояние от тип включено / изключено ) и не мога да разбера като ЦЯЛО ЗАЩО ми е едно запазване в D-тригери при положение , че си имам shift reg (важната думичка в случея REG - има къде да се запази инф. , докато се обработва).
Виж за output shift reg - да съгласен съм че си трябват, за да е сигурно задържането на информацията, но при Input :? нали при проверяване на входовете се попълва информацията в shiftreg-а и се обработва за части от секундата , за какво се тези д-тригери , ако искам после след Х време да взема пак каква е била инфорамцията ?!. Е , че толкова ли не мога да я запазя в един 8бит регистър :? Май тези D-тригери играят роля, когато не се ползва MCU , а се навръзват елементи за упраленито му. Защото тези D-тригери лесно ще си ги заменя с един рег.в пмаета на MCU-то и винаги ще си имам резулатат ;) май сам стигнах до отговора или нещо съм в грешка :?

---
така оправих всичко , но се появи един проблем , както винаги , нали.
Не знам защо директни режим не работи (от входовете директнов shiftreg).
Посредством д-тригерите проблем няма ,но директно не ще :?
единия път ми изкара всички 1-ци , други път всичко 0-ли, а аз съм дал 0001110 на входовете на shiftreg.
Борих се тука 15мин с тоя директен режим , но неще. Трябва да излизам , за това реших да го дам така , макар и с едно неработещо "нещо" :D

Код:
;
; 74HCT597.H
;
; WARNING !!! BAD ENGLISH
;
; 74HTC597 header file
; 8 parallel in , 1 serial out :)

   MESSG "MUST DEFINE in main program SHIFTREG and SHIFTREGBITS registers"

#define    QS      PORTA,0
#define      PL      PORTA,1
#define      SHcp   PORTA,2
#define      STcp   PORTA,3
#define      MR       TO_VSS      ; MR is always +5v

SHIFTREGINIT MACRO

   ; shiftreg init
   bcf      STcp
   bcf      SHcp
   bcf      PL

   movlw   D'8'
   movwf   SHIFTREGBITS

   clrf   SHIFTREG

   ENDM
;
;

getshiftreg_latch:

   SHIFTREGINIT   

   bsf      PL
   bsf      STcp   ; 1 impulse for
   bcf      STcp   ; inputS to latcheS

   bcf      PL      ; latcheS to shiftreg
   nop
   bsf      PL      ; shifting mode

   goto    getnextinshiftreg
;
;

getshiftreg_direct:

   SHIFTREGINIT
   
   ; PL=L and MR=H (MR always is H)
   ; so we are ready work in direct mode

   bsf      STcp   ; from inputS (direct)
   bcf      STcp   ; to shiftreg
   
getnextinshiftreg:

   rlf      SHIFTREG,F
   btfss   QS
   bcf      SHIFTREG,0
   btfsc   QS
   bsf      SHIFTREG,0
   
   bsf      SHcp         ; 1x
   bcf      SHcp         ; shifting
   decfsz   SHIFTREGBITS,F
   goto   getnextinshiftreg
   return
;
;


Код:
; SIMPLE MAIN PROGRAM
; main.asm of shift reg test

   ERRORLEVEL -302


   LIST   p=16F84A
   #include <p16F84A.inc>
   __CONFIG   _CP_OFF && _PWRTE_ON && _XT_OSC

#define   WREG   W
#define   RAMBASE   0x0C
   
   ORG 0x000
   goto start

#include "74HCT597.h"

TEMP         equ   RAMBASE
SHIFTREG      equ   RAMBASE+1
SHIFTREGBITS   equ RAMBASE+2

start:

   bcf      INTCON,GIE

   bsf      STATUS,RP0
;
        movlw         B'00000001'
        movwf         TRISA
   clrf              TRISB

;   
   movlw   B'10000000'
   movwf   OPTION_REG
;   
   bcf      STATUS,RP0
;
   clrf   PORTA
   clrf   PORTB
   bsf      PORTB,0

loop:

   call   getshiftreg_latch
   movfw   SHIFTREG
   movwf   PORTB

   goto    loop
;
;

   END   



Радвам се , че и аз мога да помогна / да съм Ви полезен. :)

edit: забравих да кажа таблицата с режимите на 597.

edit2 видях си един пропуск RA4 не съм го направил вход , тъй като не го ползвам.
edit3: ох пак се обърках , когато не се ползва е изход, нали ако е вход ще се лута нагоре надолу като не е вързан. ](*,)

реда

clrf TRISA
bsf TRISA,0

е заменен с

movlw B'00000001'
movwf TRISA


Прикачени файлове:
Коментар на файл: 74HCT597 function table
74hct597-functiontable.jpg
74hct597-functiontable.jpg [ 39.27 KiB | Прегледано 4538 пъти ]

_________________
един факт :-)
Съжалявам , че исках да помогна ...
Пет Ное 04, 2005 11:29 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 74 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5

Кой е на линия

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


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

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