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

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Постни кода на подпрограмата с която четеш регистъра. Няма как да си го изгорил, това са входове и на тях се подават TTL напрежения, дали ще е през резистор или директно +5V/GND няма значение. А този 1uA е сигурно консумацията на ток на един вход.

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


Чет Окт 27, 2005 11:09 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Охх извинете , че и вас ви обърках / побърках.

Да този 1uA е консумацията на вход , а аз не знам защо реших , че ИС има "свойството" на светодиодите :evil: ( :oops: )

Значи.

Хванах 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
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 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
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Е това и правя. :) АМА ТОЧНО ТОВА ! , нали с малкото изключение , че си правя ресет по учебник , но това не мисля , че е проблем.

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

А иначе аз съм си пооочти спокоен 8)

Благодаря за вниманието и отделенето време на всички, лека вечер както каза вече някои в друга тема :mrgreen:

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


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

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
За да тръгне тази първата програмка, трябва pull-up резистор на PL - PORTA,4 (пин 3 на 84-ката), щото е open drain.


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

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
не съм гледал кое как е вързал ама ако е така най-добре е да го премести на друг пин който не е опън дрейн защото трябва да слага много малък pull-up резистор 100-200 ома щото така се замазват фронтовете че майка плаче цял ден си загубих с един такъв опън дрейн и един HC595


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

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
То на първата програмка съм и леко грешно дал,без да искам , ползвах макрос, въпреки , че в началто си бях решил да си е "функция". Та в крайна сметка нали промених нещата, но гледам , че main не вика getshiftreg_ , а вика макроса , който вече го няма :)

Относно PL , при положение , че MR отива за постоянно на +5в , то PL минава на негово място PORTA1 , ако не се лъжа, а и пак казвам това е само тествоа програмка, най-вероятно там където ми трябва това ще се пада на PORTB или в най-лошия случей на PORTA0:3 ;) както сега ще стане.

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


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

Регистриран на: Пет Фев 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Това което искаха да кажат е че на PORTB му трябва pullup, и то не много голям, вградените осигуряват малък ток.


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

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
Пирев хубаво си я написал ама си е... на всички прекъсвания ами ако му трябват :oops:


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

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
ToHu къде видя в програмката да се ползва PORTB а и pull-up е на входовете бе не на изхода


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

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами той е писал че ще ползва порт В, а пък за pull upp-а не знам кво ми е щракнало, горе ставаше въпрос за pull upp-а на А4 и в инерцията .... мда ... тук съм написал глупост :)


Пет Окт 28, 2005 5:11 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
VSU написа:
Пирев хубаво си я написал ама си е... на всички прекъсвания ами ако му трябват :oops:

Не сванах това за прекъсванията ... :oops:

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


Пет Окт 28, 2005 9:00 am
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

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

То и аз си видях още една грешка в моята програма. Защото нали ви казах: ползвах макрос, но си викам да я направя с "функция" и да я дам тук, нали да обсъдиме , та бързата работа и за не майстора е опасна работа :lol:

Благодаря все пак като цяло ми се изнясниха нещата.

Относно принципа на дейстиве на 597 всичко точно съм бил разбрал.
Относно RA4 разбрах , че не е много разумно да го ползвам за output.
Разбрах , че мога и да не ресетирам 597 , ами директно да дам MR на +5в и да го ползвам в работен режим (въпреки че хората са заложили функция ресет :- ? ).

Остава сега пак да се върна на тестващата платка и да видя какво съм бил объркал.

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


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

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

E има места където е предимство :D


Пет Окт 28, 2005 10:29 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 74 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5  Следваща

Кой е на линия

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


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

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