|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 5:31 pm
PIC - More InputS are needed :)
| Автор |
Съобщение |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Постни кода на подпрограмата с която четеш регистъра. Няма как да си го изгорил, това са входове и на тях се подават TTL напрежения, дали ще е през резистор или директно +5V/GND няма значение. А този 1uA е сигурно консумацията на ток на един вход.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Окт 27, 2005 11:09 pm |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
Охх извинете , че и вас ви обърках / побърках.
Да този 1uA е консумацията на вход , а аз не знам защо реших , че ИС има "свойството" на светодиодите  (  )
Значи.
Хванах 74HCT597 datasheet-a и почнах да го изучавам. Разбрах режимите , кое как и най-вече защо* !
Написах си програмката, обаче с нея не работеше , за това потърсих и намерих примерна програма за 597 и 16F84А.
Е записах я, вързах пик-а с ис-то както искаха , но нъц
Ето моята програма:
 |  |  |  | Код: ; 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+2
start:
bsf STATUS,RP0 ; clrf TRISA clrf TRISB bsf TRISA,0 ; movlw B'10000000' movwf OPTION_REG ; bcf STATUS,RP0 ; clrf PORTA clrf PORTB
loop:
GETSHIFTREG SHIFTREG
movfw SHIFTREG movwf PORTB
; 2 second wait movlw D'32' movwf TEMP ; clrf TMR0 bsf STATUS,RP0 movlw B'10000111' movlw OPTION_REG ; call wait decfsz TEMP,F goto $-2 goto loop ; ;
wait:
bcf INTCON,T0IF btfss INTCON,T0IF goto $-1 return ; ;
END
----------
; WARNING !!! BAD ENGLISH ; ; 74HTC597 header file ; 8 parallel in , 1 serial out :)
#define QS PORTA,0 #define MR PORTA,1 #define SHcp PORTA,2 #define STcp PORTA,3 #define PL PORTA,4
SHIFTREGBITS equ RAMBASE+10
getshiftreg_:
movlw D'8' movwf SHIFTREGBITS movlw 0 ; i don't know why , but realy movwf WREG ; clrf WREG doesn't work :?
bcf MR ; these two makes bsf PL ; reset bcf STcp ; 1 impulse for bsf STcp ; input reg bcf STcp
bsf MR ; going in bcf PL ; working mode
bcf STcp ; 1impulse for bsf STcp ; (input to) shift reg bcf STcp
bsf PL ; shifting mode bcf SHcp
getnextinshiftreg:
btfss QS bcf WREG,0 btfsc QS bsf WREG,0 rlf WREG,F bsf SHcp bcf SHcp decfsz SHIFTREGBITS,F goto getnextinshiftreg return ; ;
|  |  |  |  |
Ето тази ,която намерих (и двете програми са просто за тестване принципа на работа на преместващия регистър)  |  |  |  | Код:
ERRORLEVEL -302
LIST p=16F84A #include <p16F84A.inc> __CONFIG _CP_OFF && _PWRTE_ON && _XT_OSC
#define WREG W #define RAMBASE 0x0C
Cblock 0x0C RX CountSPI endc
#define Data PORTA,0 #define Clock PORTA,1 #define Latch PORTA,2 #define Load PORTA,3
HC597 macro Var,Var1
Local Loop movlw .8 movwf Var1 bsf Latch nop bcf Latch bcf Load nop bsf Load
Loop rlf Var,f
btfss Data bcf Var,0 btfsc Data bsf Var,0
bsf Clock nop bcf Clock
decfsz Var1,f goto Loop
endm
ORG 0x000 goto main ORG 0x004 goto main
main:
bsf STATUS,RP0 movlw B'00010001' movwf TRISA clrf TRISB
bcf STATUS,RP0
clrf PORTA bsf Load
Loop HC597 RX, CountSPI movf RX,W movwf PORTB
goto Loop
END
|  |  |  |  |
* - Лично аз не мога "дай тука Х и там ще имаш Y" , трябва да знам защо е така ,за да мога да го направя.
иначе ми е голямо търсене и ако има проблем винаги се сънявам , там където не знам защо трябва да имам тоя Y при X и не ми върви работата.
|
| Пет Окт 28, 2005 12:03 am |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
ОК сега споко не е толкова трудно първо вържи директно MR входа към VCC+ за да не ресетваш регистъра след това правиш нарастващ импулс 0->1->0 на ST входа за да запомниш състоянието на входовете в лач регистъра след това правиш PL входа в 0 и правиш 0->1->0 импулс на ST входа с което прхвърляш данните от входния регистър в преместващия регистър такааааааа сега като клокваш SH входа с нарастващ фронт 0->1 (така 8 пъти) на изхода Q ще получиш в последователен вид данните които си записъл когато направи импулс на ST входа от теб се иска само да четеш този изход и в зависимост дали е 1 или 0 да си пълниш една променлива с ротация
|
| Пет Окт 28, 2005 12:32 am |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
Е това и правя.  АМА ТОЧНО ТОВА ! , нали с малкото изключение , че си правя ресет по учебник , но това не мисля , че е проблем.
Значи след като програмата е ок, остава нещо в хардуера - свързването , но и там проверявах , хмм.
Е явно пак. Е поне съм разбрал правилно как стоят нещата с 597-цата ,което е радостно малко или много.
А иначе аз съм си пооочти спокоен
Благодаря за вниманието и отделенето време на всички, лека вечер както каза вече някои в друга тема 
|
| Пет Окт 28, 2005 12:44 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
За да тръгне тази първата програмка, трябва pull-up резистор на PL - PORTA,4 (пин 3 на 84-ката), щото е open drain.
|
| Пет Окт 28, 2005 12:52 am |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
не съм гледал кое как е вързал ама ако е така най-добре е да го премести на друг пин който не е опън дрейн защото трябва да слага много малък pull-up резистор 100-200 ома щото така се замазват фронтовете че майка плаче цял ден си загубих с един такъв опън дрейн и един HC595
|
| Пет Окт 28, 2005 1:11 am |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
То на първата програмка съм и леко грешно дал,без да искам , ползвах макрос, въпреки , че в началто си бях решил да си е "функция". Та в крайна сметка нали промених нещата, но гледам , че main не вика getshiftreg_ , а вика макроса , който вече го няма
Относно PL , при положение , че MR отива за постоянно на +5в , то PL минава на негово място PORTA1 , ако не се лъжа, а и пак казвам това е само тествоа програмка, най-вероятно там където ми трябва това ще се пада на PORTB или в най-лошия случей на PORTA0:3  както сега ще стане.
|
| Пет Окт 28, 2005 1:36 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Прочетох дейта шийта на 74хц597 и сътворих нещо такова/* не гарантирам че работи*/:
 |  |  |  | Код: ; ; 74HC597 - 8 parallel inputs, 1 serial output ;
Count EQU RAMBASE+0 SerialData EQU RAMBASE+1
#define SerIn PORTA,4 ; 9 pin, Q, Serial data output #define Reset PORTA,0 ; 10 pin, Reset, MR, asynchrounus reset input, active LOW #define Clock PORTA,1 ; 11 pin, SHcp, Shift clock input ( LOW-to-HIGH, edge trigered ) #define Store PORTA,2 ; 12 pin, STcp, Storage clock input ( LOW-to-HIGH, edge trigered ) #define Load PORTA,3 ; 13 pin, PL, Parallel load input ( active LOW )
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 main: call ReadShiftRegister movwf PORTB call Delay1s goto main
ReadShiftRegister: ; Reset register bcf Reset bcf Clock ; Clock not active bcf Store ; Store not active bsf Load ; Load not acitve bsf Reset
; load data to input latch bsf Store bcf Store
; transfer data from input latch to shift register bcf Load bsf Store bcf Store bsf Load ; get data from shift register movlw 8 movwf Count ReadShiftRegisterLoop: bsf Clock bcf STATUS,C btfsc SerIn bsf STATUS,C bcf Clock rlf SerialData,F decfsz Count,F goto ReadShiftRegisterLoop
; Save serial data in WREG movf SerialData,W
return Delay1s: ; put code for delay 1 second return
|  |  |  |  |
Аааа, не съм видял, че PL ти е на PORTA.4 ! Сложи там SerialData и го използвай като вход, а PL сложи на мястото на SerialData. Може и да ти работи програмата, язък, само дет писах и аз 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
Последна промяна ¶ на Пет Окт 28, 2005 1:50 am, променена общо 1 път
|
| Пет Окт 28, 2005 1:46 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
Това което искаха да кажат е че на PORTB му трябва pullup, и то не много голям, вградените осигуряват малък ток.
|
| Пет Окт 28, 2005 1:47 am |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
Пирев хубаво си я написал ама си е... на всички прекъсвания ами ако му трябват 
|
| Пет Окт 28, 2005 2:54 am |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
ToHu къде видя в програмката да се ползва PORTB а и pull-up е на входовете бе не на изхода
|
| Пет Окт 28, 2005 3:03 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
Ами той е писал че ще ползва порт В, а пък за pull upp-а не знам кво ми е щракнало, горе ставаше въпрос за pull upp-а на А4 и в инерцията .... мда ... тук съм написал глупост 
|
| Пет Окт 28, 2005 5:11 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Не сванах това за прекъсванията ... 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Окт 28, 2005 9:00 am |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
Момчета като гледам всички сме писали по-късните часове на нощта , така че ни е простено.
То и аз си видях още една грешка в моята програма. Защото нали ви казах: ползвах макрос, но си викам да я направя с "функция" и да я дам тук, нали да обсъдиме , та бързата работа и за не майстора е опасна работа
Благодаря все пак като цяло ми се изнясниха нещата.
Относно принципа на дейстиве на 597 всичко точно съм бил разбрал.
Относно RA4 разбрах , че не е много разумно да го ползвам за output.
Разбрах , че мога и да не ресетирам 597 , ами директно да дам MR на +5в и да го ползвам в работен режим (въпреки че хората са заложили функция ресет :- ? ).
Остава сега пак да се върна на тестващата платка и да видя какво съм бил объркал.
|
| Пет Окт 28, 2005 10:24 am |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
the_real_maniac:Отноосно RA4 разбрах , че не е много разумно да го ползвам за output.
E има места където е предимство 
|
| Пет Окт 28, 2005 10:29 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 7 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|