Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

duplicator eeprom 24Cxx

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Řešení problémů s různými konstrukcemi
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
eMichal
Neregistrovaný





PříspěvekZaslal: po duben 06 2009, 15:47    Předmět: duplicator eeprom 24Cxx Citovat

hledal jsem všude možně schema a konstrukci,našel jsem nějake,ale jsou schopny kopirovat jen po 24C16,nema někdo konstrukci kdy by šlo kopirovat i 24C32 ,24C64 ? ke konstrukcim mam i zdrojove kody,tak jsem zvažoval do ktere časti přispěvek dat Smile ,duplicator z netu použiva PIC,
našel jsem i to co bych potřeboval ,ale jako hotovou věc za 39euro
nebo jen schema zapojeni bez hex či asm Sad,nevyraběl někdo s přitomnych něco na kopirovani eeprom nebo nějaky programator,do ktereho přes PC pošlu bin soubor a pak někde bez PC dostal do eepromy
Návrat nahoru
emichal
Neregistrovaný





PříspěvekZaslal: po duben 06 2009, 15:55    Předmět: Citovat

schema,ale umi jen po 24C16 Cry


cop-scshe.gif
 Komentář:
schema

Stáhnout
 Soubor:  cop-scshe.gif
 Velikost:  9.68 kB
 Staženo:  77 krát

Návrat nahoru
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: po duben 06 2009, 15:59    Předmět: Citovat

Postavit JDM + ICProg.
_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: po duben 06 2009, 16:15    Předmět: Citovat

emichal napsal(a):
schema,ale umi jen po 24C16 Cry

Píšeš, že k tomu máš zdroják, tak si ho uprav pro větší paměti, HW je stejný.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
emichal
Neregistrovaný





PříspěvekZaslal: po duben 06 2009, 20:06    Předmět: Citovat

to zas neumim,něco malo jsem kdysi pro picky upravoval,ale nejsem
žadny odbornik Sad Sad Sad Sad
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copieur autonome de memoires I2C ;;
;; 'cop10.ASM' : (c) Pierre COL, mars 2001. ;;
;; ;;
;; Programme du PIC16C84, 16F84 ou 16F84A avec quartz 4 MHz ;;
;; ;;
;; - v03 : 1ere modification avec RA4. ;;
;; - v04 : 2eme modification avec un SDA entierement commun sur RA4. ;;
;; - v05 : un seul jeu d'instructions + aiguillage avec bit CANAL. ;;
;; - v06 : copie la 24C16 'reference' vers la 24C16 'copie'. ;;
;; - v07 : + verification de la programmation. ;;
;; - v08 : + verification absence court circuit entrees a la masse. ;;
;; - v09 : clignotement led jaune pour patienter pendant programmation. ;;
;; - v10 : inversion des touches + suppression verif si inter passant. ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;**********************************************************************;

;;;; Definition et parametres (utiles a l'assembleur) : ;;;;

LIST P=16F84, R=DEC

#include "P16F84.INC"

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__IDLOCS 2000h

;**********************************************************************;

;;;; Etiquettes : ;;;;

;;; Adresses programme :
DEBUT equ 000h ; Debut de la memoire physique.
INT equ 004h ; Routine d'interruption (pas utilisee).
MEM equ 006h ; Endroit ou stocker des constantes.

;;; Adresses RAM :
DebutRAM equ 00Ch
BOOLEEN equ (DebutRAM+1) ; - 8 bits = 8 variables booleennes.
I2C_data equ (BOOLEEN+1) ; - Octet de donnee.
I2C_adrHIGH equ (I2C_data+1) ; - Adresse : octet de poids faible.
I2C_adrLOW equ (I2C_adrHIGH+1) ; - Adresse : octet de poids fort.
VAR1 equ (I2C_adrLOW+1) ; - 3 variables temporaires :
VAR2 equ (VAR1+1) ; sauvegarde de W, compteurs, etc.
MSBfin equ (VAR2+1) ;
LSBfin equ (MSBfin+1) ;
VerifDATA equ (LSBfin+1) ;
Touche equ (VerifDATA+1) ;
EtatLeds equ (Touche+1) ;

;;; Bits du Port A :
RA0 equ 0 ; SCL copie.
RA1 equ 1 ; non connectee.
RA2 equ 2 ; SCL reference.
RA3 equ 3 ; Inter "Mode".
RA4 equ 4 ; SDA commun copie et reference.

;;; Bits du Port B :
RB0 equ 0 ; Bouton poussoir pour copie 24C01.
RB1 equ 1 ; Bouton poussoir pour copie 24C02.
RB2 equ 2 ; Bouton poussoir pour copie 24C04.
RB3 equ 3 ; Bouton poussoir pour copie 24C08.
RB4 equ 4 ; Bouton poussoir pour copie 24C16.
RB5 equ 5 ; Led verte.
RB6 equ 6 ; Led rouge.
RB7 equ 7 ; Led jaune.

;;; Entrees / sorties :

SCLcop equ RA0
SCLref equ RA2
Inter equ RA3
SDA equ RA4

BP24C01 equ RB0
BP24C02 equ RB1
BP24C04 equ RB2
BP24C08 equ RB3
BP24C16 equ RB4
LedVerte equ RB5
LedRouge equ RB6
LedJaune equ RB7

;;; BOOLEEN :
I2CACK equ 0 ; verifie si l'acces au bus I2C est correct.
CANAL equ 1 ; 'Reference' : CANAL=0 / 'Copie' : CANAL=1.
NoVer equ 2 ; mis a 1 si inter passant : alors sauter verif.

;;; Constantes :
I2C_WR equ 00000000b
I2C_RD equ 00000001b
I2C_EEPROM equ 10100000b

;**************************************************************************;

;;;; Donnees EEPROM interne du PIC : ;;;;

EEPROM_DATA equ 2100h

ORG EEPROM_DATA ; Contenu de l'EEPROM (64 octets).

DE "(c) Pierre COL, mars 2001, V 1.0"
DE "Site web: http://www.col2000.org"

;**************************************************************************;

;; Divers actions, non utiles dans ce cas precis :

ORG DEBUT
GOTO PROG

ORG INT ; Retour d'interruption (mais
RETFIE ; celle-ci n'est pas utilisee).

ORG MEM ; Constantes ou textes divers a stocker :
Message DT "Copieur de 24Cxx",0

;; Debut du programme : ;;;;

PROG BSF STATUS,RP0 ; Pour acceder aux registres $80 a $AF.

; Configuration des ports A et B (0=S / 1=E) :
MOVLW 01000b ; - OUT : SCLref/SCLcop/SDA/RA1.
MOVWF TRISA & 01111111b ; - IN : RA3 = Inter.
MOVLW 00011111b ; - OUT : RB5 a RB7 (= Les 3 leds).
MOVWF TRISB & 01111111b ; - IN : RB0 a RB4 (poussoirs).
MOVLW 11111111b ; Registres d'options : B7=1,
MOVWF OPTION_REG & 01111111b ; resist. de tirage non actives.

BCF STATUS,RP0 ; Pour acceder aux registres $00 a $2F,
; notamment les Ports A et B.

MOVLW 11111111b
MOVWF PORTA ; Ports I2C initialises (a "1").
MOVWF PORTB ; Leds eteintes : [PB4]-[330]-(led)-[+5V].

CLRF BOOLEEN ; Initialiser d'un coup a '0' les
; 8 bits de la variable booleenne ;
; en fait, seul le bit 0 est utilise.

;************************* Partie principale : ************************;


;; Les trois leds sont eteintes. ;;

CLRF EtatLeds ;
AttendTouche CALL Tempo50ms ;
INCF EtatLeds,F ;
BTFSS EtatLeds,3 ; tous les 400 ms :
GOTO LedRONVOFF ; ou bien :
BSF PORTB,LedRouge ;;; Led rouge eteinte
BCF PORTB,LedVerte ;;; et led verte allumee.
GOTO LireClavier ; ou bien :
LedRONVOFF BCF PORTB,LedRouge ;;; Led rouge allumee
BSF PORTB,LedVerte ;;; et led verte eteinte.

LireClavier COMF PORTB,W ; Lire le clavier,
ANDLW 00011111b ; filtrer les 5 touches,
MOVWF Touche ; et stocker dans la variable 'Touche'.

CLRF MSBfin ; Initialiser a $00 les variables
CLRF LSBfin ; reprentant le depassement d'adresse.

TestBP24C16 MOVLW 00010000b ; Touche BP 24C16 (et seulement...) ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO TestBP24C08 ; - si non : tester le BP 24C08.
BSF MSBfin,3 ; - si oui : Arret a l'adresse $800.
GOTO DebutCopie ; et on y va...

TestBP24C08 MOVLW 00001000b ; Touche BP 24C08 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO TestBP24C04 ; - si non : tester le BP 24C04.
BSF MSBfin,2 ; - si oui : Arret a l'adresse $400.
GOTO DebutCopie ; et on y va...

TestBP24C04 MOVLW 00000100b ; Touche BP 24C04 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO TestBP24C02 ; - si non : tester le BP 24C02.
BSF MSBfin,1 ; - si oui : Arret a l'adresse $200.
GOTO DebutCopie ; et on y va...

TestBP24C02 MOVLW 00000010b ; Touche BP 24C02 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO TestBP24C01 ; - si non : tester le BP 24C01.
BSF MSBfin,0 ; - si oui : Arret a l'adresse $100.
GOTO DebutCopie ; et on y va...

TestBP24C01 MOVLW 00000001b ; Touche BP 24C01 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO AttendTouche ; - si non : retourner lire la touche.
BSF LSBfin,7 ; - si oui : Arret a l'adresse $080.
;GOTO DebutCopie ; et on y va...

;; Eteindre les trois leds : ;;

DebutCopie BSF PORTB,LedJaune ; Led jaune...
BSF PORTB,LedRouge ; Led rouge...
BSF PORTB,LedVerte ; Led verte...

;; Tester l'etat de l'inter

BTFSS PORTA,Inter ; L'inter est-il passant (RA3=0) ?
BSF BOOLEEN,NoVer ; Si oui, bit NoVer de BOOLEEN a 1.

;; Lancer la copie : ;;

CLRF I2C_adrHIGH ; - La premiere adresse
CLRF I2C_adrLOW ; est l'adresse $000.

AdrSuivante1 BTFSS I2C_adrLOW,6 ; - toutes les 64 adresses,
BCF PORTB,LedJaune ; allumer ou eteindre la
BTFSC I2C_adrLOW,6 ; led jaune. Le clignotement
BSF PORTB,LedJaune ; fera patienter l'utilisateur.

BTFSS PORTA,SDA ; - On verifie que SDA est bien a 1,
GOTO ErreurCopie ;
BTFSS PORTA,SCLref ; - et que SCL reference est bien a 1,
GOTO ErreurCopie ;
BTFSS PORTA,SCLcop ; - et que SCL copie est bien a 1.
GOTO ErreurCopie ;

CALL CANALreference ; La memoire pointee est la reference.
CALL Read24C16 ; - On lit l'octet de donnee,
MOVF I2C_data,W ; - qu'on stocke pour comparaison
MOVWF VerifDATA ; ulterieure.
BTFSS BOOLEEN,I2CACK ; - Si erreur de lecture,
GOTO ErreurCopie ; on abrege...

CALL CANALcopie ; La memoire pointee est la copie.
CALL Write24C16 ; - On ecrit l'octet de connee.
BTFSS BOOLEEN,I2CACK ; - Si erreur d'ecriture,
GOTO ErreurCopie ; on abrege...

BTFSC BOOLEEN,NoVer ; Si l'inter est passant,
GOTO ApresVerif ; sauter la verification.

CALL Read24C16 ; - On relit l'octet ecrit.
BTFSS BOOLEEN,I2CACK ; - Si erreur de relecture,
GOTO ErreurCopie ; on abrege...
MOVF VerifDATA,W ; - On compare avec la donnee
XORWF I2C_data,W ; que l'on avait stockee.
BTFSS STATUS,Z ; - Si elle est differente,
GOTO ErreurCopie ; alors erreur : on abrege...

ApresVerif INCF I2C_adrLOW,F ; - On incremente l'adresse : d'abord
BTFSC STATUS,Z ; l'octet de poids faible, et si
INCF I2C_adrHIGH,F ; retenue, l'octet de poids fort.
MOVF LSBfin,W ; - Adresse courante = Adresse fin ?
XORWF I2C_adrLOW,W ; -> on compare les LSB...
BTFSS STATUS,Z ; - Si differents, adresse suivante.
GOTO AdrSuivante1 ;
MOVF MSBfin,W ; - Si egaux, on compare les MSB...
XORWF I2C_adrHIGH,W ; - si differents, adr. suivante.
BTFSS STATUS,Z ; - si egaux,
GOTO AdrSuivante1 ; alors termine avec succes :

BCF PORTB,LedVerte ; on allume la led verte et fin.
GOTO FinCopie ;

ErreurCopie BCF PORTB,LedRouge ; Erreur ? on a abrege ?
; allumer la led rouge, puis fin.

FinCopie BSF PORTB,LedJaune ; On eteint la led jaune.
Fin GOTO Fin ; Fin des operations...
; On reboucle eternellement,
;; Fin du programme. ; en attendant un RESET.


;************************* Routines du programme : ************************;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Temporisation de 0,05 seconde : ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Tempo50ms MOVLW 25
MOVWF VAR1
GOTO Boucle1TP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Temporisation de 0,5 seconde : ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Tempo500ms MOVLW 250 ; N1 ; 1 **
MOVWF VAR1 ; 1 ** 4+
Boucle1TP MOVLW 200 ; N2 ; 1 * ;;
MOVWF VAR2 ; 1 * ;; 250x
Boucle2TP NOP ; 1 ; ;; (200x10+2+2)
NOP ; 1 ; ;;
NOP ; 1 ; 2+ ;;
NOP ; 1 ; 200x10 ;;
NOP ; 1 ; =2002 ;;
NOP ; 1 ; ;;
NOP ; 1 ; ;;
NOP ; 1 ; ;; T(us) = 4+N1x[N2x10+4].
DECFSZ VAR2,F ; 2 ; ;; avec N1=250 et N2=200 :
GOTO Boucle2TP ; ; ;; T = 501004 us
DECFSZ VAR1,F ; 2 ;; T = 0,5 s
GOTO Boucle1TP ; ;;
RETURN ; 2 **

;**************************************************************************;

;--------------------------------------------------------------------------;
; Fonctions principales pour ecrire et lire dans l'EEPROM ;
; I2C, octet par octet (pour les modeles 24C01 a 24C16). ;
;--------------------------------------------------------------------------;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lit l'octet situe dans l'EEPROM I2C et met le contenu dans [I2C_data]. ;;
;; Pour indiquer l'adresse a lire : ;;
;; les 3 bits de poids fort de l'adresse sont mis dans [I2C_adrHIGH]. ;;
;; les 8 bits de poids faible de l'adresse sont mis dans [I2C_adrLOW]. ;;
;; (attention, cela modifie les variables VAR1, VAR2 et BOOLEEN) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Read24C16 CALL Set_Adr_I2C ; - Pointer l'adresse.
CALL I2CSTART ; - Envoyer un ordre de
RLF I2C_adrHIGH,W ; lecture a l'EEPROM I2C.
ANDLW 00001110b ;
IORLW (I2C_EEPROM+I2C_RD) ; (octet : 1010xxx1b
CALL WtoI2C ; xxx = MSB adresse)
CALL I2CgetACK ; - Confirme par un ACK.
CALL I2CtoW ; - Lire l'octet.
MOVWF I2C_data ; - Le mettre dans [I2C_data]
CALL I2CsetNoACK ; - Terminer l'operation
CALL I2CSTOP ; (pas d'ACK, mais un STOP).
RETURN ; - C'est fini !

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Ecrit l'octet situe dans [I2C_data] dans l'EEPROM I2C. ;;
;; Pour indiquer l'adresse ou ecrire : ;;
;; les 3 bits de poids fort de l'adresse sont mis dans [I2C_adrHIGH]. ;;
;; les 8 bits de poids faible de l'adresse sont mis dans [I2C_adrLOW]. ;;
;; (attention, cela modifie les variables VAR1, VAR2 et BOOLEEN) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Write24C16 CALL Set_Adr_I2C ; Pointer l'adresse
MOVF I2C_data,W ; Lire l'octet I2C_data a envoyer
CALL WtoI2C ; Envoyer l'octet
CALL I2CgetACK ; Acquerir l'ACK
CALL I2CSTOP ; STOP
BTFSS BOOLEEN,I2CACK ; Tester l'ACK :
GOTO MemNonDispo1 ; - Si PB : tant pis, abreger !
ProgPasFinie CALL I2CSTART ; - Sinon :
MOVLW (I2C_EEPROM+I2C_WR) ; attendre que la programmation
CALL WtoI2C ; soit terminee en essayant
CALL I2CgetACK ; d'acceder a la memoire.
CALL I2CSTOP ; Quand celle-ci repond (ACK),
BTFSS BOOLEEN,I2CACK ; c'est qu'elle est enfin dispo
GOTO ProgPasFinie ; et qu'elle a fini le boulot.
MemNonDispo1 RETURN ; La, c'est fini !

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Dans l'EEPROM I2C, pointe l'adresse memoire voulue : ;;
;; les 3 bits de poids fort de l'adresse sont mis dans [I2C_adrHIGH]. ;;
;; les 8 bits de poids faible de l'adresse sont mis dans [I2C_adrLOW]. ;;
;; ex pour l'adresse $5BC: $05 dans I2C_adrHIGH et $BC dans I2C_adrLOW ;;
;; (attention, cela modifie les variables VAR1, VAR2 et BOOLEEN) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Set_Adr_I2C CALL I2CSTART ; - 'Start' : debut sequence.
RLF I2C_adrHIGH,W ; - on cree le premier octet :
ANDLW 00001110b ; B3 a B1 : les 3 bits de poids
IORLW (I2C_EEPROM+I2C_WR) ; fort de l'adresse ; B7 a B4 =
CALL WtoI2C ; [1010] et B0 = 0 (write).
CALL I2CgetACK ; - on verifie si l'octet a bien
BTFSS BOOLEEN,I2CACK ; ete recu :
GOTO MemNonDispo2 ; .si non, tant pis, on quitte.
MOVF I2C_adrLOW,W ; .si oui, on envoie l'octet de
CALL WtoI2C ; poids faible de l'adresse en
CALL I2CgetACK ; verifiant qu'il est recu.
MemNonDispo2 RETURN ;; Si PB : I2CACK=0 dans "BOOLEEN".

;**************************************************************************;


;--------------------------------------------------------------------------;
; sous-fonctions permettant de realiser ;
; les chronogrammes d'acces a la memoire : ;
;--------------------------------------------------------------------------;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Envoie une sequence 'START' au peripherique I2C ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

I2CSTART CALL SetSCL ; Au debut, SCL
BSF PORTA,SDA ; et SDA sont a '1'.
CALL Tempo5us ; On attend 5 us,
BCF PORTA,SDA ; puis SDA passe a '0',
CALL Tempo5us ; puis on attend 5 us,
CALL ClearSCL ; puis SCL passe a '0',
CALL Tempo5us ; puis on attend 5 us.
BSF PORTA,SDA ; SDA doit etre remis a '1'
RETURN ; pour pouvoir voir les donnees
; venant de la memoire.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Envoie une sequence STOP au peripherique I2C ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

I2CSTOP CALL ClearSCL ; Au debut, SCL
BCF PORTA,SDA ; et SDA sont a '0'.
CALL Tempo5us ; On attend 5 us,
CALL SetSCL ; puis SCL passe a '1',
CALL Tempo5us ; puis on attend 5 us,
BSF PORTA,SDA ; puis SDA passe a '1',
CALL Tempo5us ; on attend 5 us...
RETURN ; Fin de la routine.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Envoie un octet contenu dans W au peripherique I2C en 'serie' : ;;
;; (attention, cela modifie les variables VAR1 et VAR2) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; L'octet a envoyer est mis dans VAR1 ; on va alors faire subir 8 fois
; a cet octet un decalage vers la gauche, en recopiant a chaque fois au
; prealable le bit B7 sur la broche SDA (avant d'appliquer une impulsion
; d'horloge sur SCL). La variable VAR2 sert de compteur : elle part de 8
; et est decrementee 8 fois jusqu'a 0 afin de compter le nombre de
; decalages :

WtoI2C MOVWF VAR1 ; - Octet a envoyer mis dans VAR1.
MOVLW 8 ; - 8 (nb de decalages) dans VAR2.
MOVWF VAR2 ;
NextBitI2Cout CALL ClearSCL ; - SCL mis a 0.
BTFSS VAR1,7 ; - Bit B7 de VAR1 a 1 ?
BCF PORTA,SDA ; si non : mettre SDA a 0.
BTFSC VAR1,7 ; - Bit B7 de VAR1 a 0 ?
BSF PORTA,SDA ; si non : mettre SDA a 1.
CALL Tempo5us ; - Appliquer impulsion sur SCL :
CALL SetSCL ; attente 5 us, SCL passe a 1,
CALL Tempo5us ; attente 5 us, SCL repasse a 0.
CALL ClearSCL ;
RLF VAR1,F ; - Decaler VAR1 un coup a gauche.
DECFSZ VAR2,F ; - Decrementer VAR2 ; si ce n'est
GOTO NextBitI2Cout ; pas la 8ieme fois, reboucler.
BSF PORTA,SDA ; - On remet SDA a '1' (permet
RETURN ; de lire SDA comme 1 entree).

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lit un octet depuis le peripherique I2C et le met dans W : ;;
;; (attention, cela modifie les variables VAR1 et VAR2) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Cette routine ressemble beaucoup a la precedente ; mais au lieu
; de recopier le bit B7 sur SDA et de decaler l'octet vers la gauche
; et ce huit fois de suite, on commence par decaler l'octet, puis on
; recopie SDA sur B0, toujours huit fois de suite. Les bits ne sont
; plus retires un a un, mais au contraire empiles les uns apres les
; autres dans VAR1 :

I2CtoW MOVLW 8 ;- VAR2=8, variable compteur qui va
MOVWF VAR2 ; comptabiliser les 8 decalages.
CLRF VAR1 ;- VAR1 initialisee a 00000000b.
NextBitI2Cin CALL ClearSCL ;- SCL mis a 0.
BSF PORTA,SDA ;- SDA mis a 1 pour etre lisible.
CALL Tempo5us ;- attente de 5 us.
CALL SetSCL ;- SCL passe a '1'.
CALL Tempo5us ;- attente de 5 us.
RLF VAR1,F ;- decalage un coup vers la gauche.
BCF VAR1,0 ;- bit B0 initialise a 0.
BTFSC PORTA,SDA ;- on teste SDA : vaut-il 0 ?
BSF VAR1,0 ; si non (SDA=1), on met B0 a 1.
DECFSZ VAR2,F ;- huitieme cycle ?
GOTO NextBitI2Cin ; si non, reboucler cycle suivant.
CALL ClearSCL ;- apres dernier cycle : SCL a 0.
MOVF VAR1,W ;- L'octet lu VAR1 est copie dans W.
RETURN ; Fin de la routine

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Verifie si le peripherique I2C renvoie un 'Acknowledge' ; si celui-ci ;;
;; est present, le bit I2CACK est mis a '1', sinon il est mis a '0'. ;;
;; (la seule variable modifiee est 'BOOLEEN') ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

I2CgetACK BSF PORTA,SDA ; On s'assure que SDA est a 1.
CALL ClearSCL ; On genere l'impulsion positive
CALL Tempo5us ; sur SCL : SCL=0, attendre
CALL SetSCL ; 5 us, SCL a '1', attendre 5
CALL Tempo5us ; us. La, lire l'etat de SDA :
BCF BOOLEEN,I2CACK ; - On met le bit I2CACK a 0.
BTFSS PORTA,SDA ; - On verifie l'ACK : SDA=0 ?
BSF BOOLEEN,I2CACK ; oui ? OK, on met I2CACK a 1.
CALL ClearSCL ; Puis SCL repasse a '0'.
RETURN ; Et la routine est terminee...

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Envoie un bit 'Acknowledge' au peripherique I2C. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

I2CsetACK CALL ClearSCL ; au debut, SCL est a 0.
BCF PORTA,SDA ; SDA est mis a 0 (on applique ACK).
CALL Tempo5us ; on attend 5 us.
CALL SetSCL ; Impulsion positive sur SCL :
CALL Tempo5us ; SCL passe a '1' pendant
CALL ClearSCL ; 5 us, puis repasse a '0'.
BSF PORTA,SDA ; Il faut penser a remettre SDA a 1.
RETURN ; Fin de la routine, retour au programme principal.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Envoie un 'No Acknowledge' au peripherique I2C. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

I2CsetNoACK CALL ClearSCL ; Au debut, SCL est a '0'.
BSF PORTA,SDA ; et SDAref a '1' (car pas d'ACK).
CALL Tempo5us ; on attend 5 us.
CALL SetSCL ; Impulsion positive sur SCL :
CALL Tempo5us ; SCL passe a '1' pendant
CALL ClearSCL ; 5 us, puis repasse a '0'.
RETURN ; Fin de la routine, retour au programme principal.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Les deux routines suivantes mettent respectivement a ;;
;; '1' et a '0' la broche SCL ; le choix de la sortie SCL ;;
;; depend du canal actif : ;;
;; - Si le bit CANAL de BOOLEEN vaut 0 : SCL 'reference' active. ;;
;; - Si le bit CANAL de BOOLEEN vaut 1 : SCL 'copie' active. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SetSCL BTFSS BOOLEEN,CANAL ; Si bit CANAL = 0 :
BSF PORTA,SCLref ; SCLref est mis a '1'.
BTFSC BOOLEEN,CANAL ; Si bit CANAL = 1 :
BSF PORTA,SCLcop ; SCLcop est mis a '1'
RETURN

ClearSCL BTFSS BOOLEEN,CANAL ; Si bit CANAL = 0 :
BCF PORTA,SCLref ; SCLref est mis a '0'.
BTFSC BOOLEEN,CANAL ; Si bit CANAL = 1 :
BCF PORTA,SCLcop ; SCLcop est mis a '0'
RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Selection du canal (memoire) actif : ;;
;; - Si bit CANAL de BOOLEEN vaut 0 : SCL = SCLref (memoire 'reference'). ;;
;; - Si bit CANAL de BOOLEEN vaut 1 : SCL = SCLcop (memoire 'copie'). ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CANALreference BCF BOOLEEN,CANAL ; bit mis a '0'.
RETURN

CANALcopie BSF BOOLEEN,CANAL ; bit mis a '1'.
RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Temporisation de 5 micro-secondes pour respecter ;;
;; les temps d'acces aux peripheriques I2C. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Tempo5us NOP ; La tempo dure 5 us, avec le "CALL Tempo5us".
RETURN ; (CALL=2us) + (NOP=1us) + (RETURN=2us) = 5 us.

END ; L'assembleur peut maintenant aller faire dodo !


;********************** Fin generale du programme. ***************************;


z toho chytry nejsem Cry
Návrat nahoru
emichal
Neregistrovaný





PříspěvekZaslal: po duben 06 2009, 20:12    Předmět: Citovat

ZdenekHQ napsal(a):
Postavit JDM + ICProg.



a jak to bude fungovat bez PC?
Návrat nahoru
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: út duben 07 2009, 8:17    Předmět: Citovat

Já neumím PICy ani francouzsky, ale bude potřeba upravit proceduru Set_Adr_I2C a pak prodloužit tu smyčku, co provádí vlastní kopírování a možná ještě nějaké drobnosti kolem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Atlan



Založen: May 10, 2004
Příspěvky: 4513
Bydliště: Košice

PříspěvekZaslal: út duben 07 2009, 9:00    Předmět: Citovat

Ano chce to cas..a ten nikto nema na zvys.... Neviem ci by nebolo jednoduchsie napisat novy program..na stavajuci hardver.... bol oby to jednoduhcsie ako hladaat v tomto.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
vladom



Založen: Sep 11, 2008
Příspěvky: 324
Bydliště: Prievidzsko

PříspěvekZaslal: út duben 07 2009, 9:13    Předmět: Citovat

Otázka zní jestli to stačí upravit tak že se ztratí některá možnost 01 02 04 08 16, protože každá má svoje tlačítko, jinak se musí překopat program buď na autodetekci, případně stisk dvou tlačítek. Velikost paměti je vždy v řádku Arret a l'adresse $xxx Když se změní táto konstanta načte na příslušné tlačítko jinou paměť. Když nemáš čas, změň adresu např. pro typ 01 na velikost pro typ 32 nebo 64 a jedeš.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: út duben 07 2009, 9:54    Předmět: Citovat

emichal napsal(a):
ZdenekHQ napsal(a):
Postavit JDM + ICProg.



a jak to bude fungovat bez PC?


Máš pravdu, tu poslední větu jsem přehlídnul.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
emichal
Neregistrovaný





PříspěvekZaslal: út duben 07 2009, 15:03    Předmět: Citovat

vladom napsal(a):
Otázka zní jestli to stačí upravit tak že se ztratí některá možnost 01 02 04 08 16, protože každá má svoje tlačítko, jinak se musí překopat program buď na autodetekci, případně stisk dvou tlačítek. Velikost paměti je vždy v řádku Arret a l'adresse $xxx Když se změní táto konstanta načte na příslušné tlačítko jinou paměť. Když nemáš čas, změň adresu např. pro typ 01 na velikost pro typ 32 nebo 64 a jedeš.



mysliš že bude stačit např změnit jen
TestBP24C01 MOVLW 00000001b ; Touche BP 24C01 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO AttendTouche ; - si non : retourner lire la touche.
BSF LSBfin,7 ; - si oui : Arret a l'adresse $080.
;GOTO DebutCopie ; et on y va...


na
TestBP24C01 MOVLW 00000001b ; Touche BP 24C01 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO AttendTouche ; - si non : retourner lire la touche.
BSF LSBfin,7 ; - si oui : Arret a l'adresse $1600.
;GOTO DebutCopie ; et on y va...


a misto 24C01 se bude kopirovat 24C32 ? Sad
Návrat nahoru
emichal
Neregistrovaný





PříspěvekZaslal: út duben 07 2009, 15:30    Předmět: Citovat

tady je ten,co je k němu vice
http://col2000.free.fr/copieur/cop_indx.htm

našel jsem i jine verze ale bez zdrojaku jen hex
http://www.massimilianonespeca.it/progetti/duplicatore24cxx/duplicatore24cxx.htm

http://www.massimilianonespeca.it/progetti/replicatore24cxxmini/eeprom_replicator_mini_serie_24c.htm


vidim,že tady jsou ti,co tomu rozumi,čistě teoreticky,
PIC ma eepromu malou,je nějake možne řešeni,že bych
24C32 nekopiroval,doma to dostal do picky,u ktere by nemusela
byt externi eeproma a pak připojil k 24C32 a dostal to do ní?i bez
použiti PC? experimentuji ještě s něčim a ani to mě neposloucha Cry

http://www.avrprojects.net/index.php?option=com_content&view=article&id=63:i2c-eeprom-programmer&catid=37:avr-projects&Itemid=57
Návrat nahoru
vladom



Založen: Sep 11, 2008
Příspěvky: 324
Bydliště: Prievidzsko

PříspěvekZaslal: út duben 07 2009, 16:45    Předmět: Citovat

emichal napsal(a):


mysliš že bude stačit např změnit jen
TestBP24C01 MOVLW 00000001b ; Touche BP 24C01 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO AttendTouche ; - si non : retourner lire la touche.
BSF LSBfin,7 ; - si oui : Arret a l'adresse $080.
;GOTO DebutCopie ; et on y va...


na
TestBP24C01 MOVLW 00000001b ; Touche BP 24C01 ?
XORWF Touche,W ;
BTFSS STATUS,Z ;
GOTO AttendTouche ; - si non : retourner lire la touche.
BSF LSBfin,7 ; - si oui : Arret a l'adresse $1600.
;GOTO DebutCopie ; et on y va...


a misto 24C01 se bude kopirovat 24C32 ? Sad


Ne trochu jsem tě asi zmýlil, to co je za středníkem je jenom poznámka, samozřejmě musíš změnit MOVLW 00000001 na MOVLW 00100000 pro 24C32 MOVLW 01000000 pro 24C64
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
vladom



Založen: Sep 11, 2008
Příspěvky: 324
Bydliště: Prievidzsko

PříspěvekZaslal: út duben 07 2009, 16:59    Předmět: Citovat

Není mi jasné jestli si umíš sám vytvořit z toho souboru HEX a napálit to do 16F84, nechce se mi zkoušet přepisovat jedinou pic kterou mám doma. 16F627-8 jsou levnější, ale taky je třeba upravit ten zdroják. Taky je otázka kolik typů pamětí reálně potřebuješ programovat třeba by to stačilo předělat na 04-08-16-32-64 bez úpravy plošáku.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Řešení problémů s různými konstrukcemi Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.28 sekund