V.O. ..02/02/2018
rev2 07/06/2018



PROGRAMMER un AT89C2051

1ere Version Programmateur 16F874 100% asm MPLAB IDE 8.92
2eme Version Programmateur 16F877 en C mikroC
3eme version Programmateur Protocole CTS ) 18F46K22 Mikro C
4eme version Programmateur Protocole XON XOFF 18F46K22 Mikro C
Programmer avec quoi ?

lien sur re-Programmer une Horloge avec AT89C2051





Programmateur AT89C2051 avec un PIC16F874


Version Originale :
http://www.kswichit.com/victor/programmer2051.htm
Copyright (C) 2013 VICTOR MOISEY. (victor.moisey@gmail.com )
AT89C2051 Programmer using Linux terminal.html (with 16F877)

le MCU AT89C2051 :
modele 20 pin , classé obsolete aujourdh'ui.
Datasheet dispo ICI : http://www.keil.com/dd/docs/datashts/atmel/at89c2051_ds.pdf


Le document de base ATMEL pour programmer ce MCU:

AT89C2051_Flash_Programming_Method.txt


Adaptation au 16F874

Le 16F874 possede : Flash ROM=4K , RAM= 192 , EEPROM=128
et le resultat de compilation montre qu'il est suffisant .



Interface avec le PC


PC sous WIN10 .. pas de port serie dispo ..
Usage d'un cordon USB/RS232 DB9M Trend TUS9
Terminal VBRAY Virtual COM3 9600,8,N,1 RTS/CTS protocole
Rajout des liaisons RTS/CTS sur le Max232 et entre MAX232 et DB9 Femelle
Liaison ICSP RB7,RB6,MCLR,GND avec PICKIT2 .
MPLAB gere directement le Pickit2 !


PROGRAMMATION:
Utilisation de Microchip MPLAB IDE 8.92
Language tool versions:
MPASMWIN.exe v5.51 , mplink.exe v4.49 , mplib.exe v4.49
Config dans le code
EEPROM PIC non utilisée

Modifications:
PIC16F874 au lieu de 16F877 ( taille 4K au lieu de 8K prog)
Usage de Timer0 pour les delays => modif des differents delays)
Usage d'un quartz (courant ) de 4MHz au lieu de 3,6864Mhz

Mon dossier de travail : C:\Mplab8\_Mesprojets_ASM\_16F877_AT89C_progr
source asm: 16F874_AT89C2051_Programmer_Q4Mhz_180130.asm
fichier *.hex: 16F874_AT89C2051_Programmer_Q4Mhz_180130.hex


le MCU AT89C2051





Fichier au format Intel HEX à envoyer dans l'AT89C2051 :

Nota: l'editeur Notepad++ permet l'affichage specifique du format Intel HEX
en affichant les differents champs avec des couleurs differentes



Flash_LEDS.hex

L'ASM correspondant

START: CPL P1.0
ACALL WAIT
CPL P1.0
CPL P1.1
ACALL WAIT
CPL P1.1
SJMP START

WAIT: MOV R4,#05H
WAIT1: MOV R3,#00H
WAIT2: MOV R2,#00H
WAIT3: DJNZ R2,WAIT3
DJNZ R3,WAIT2
DJNZ R4,WAIT1
RET
EN
D

Capture ecran Vbray Terminal

L'usage d'un script permet d'envoyer la sequence ERASE "0 0 *" avec un delay intermediaire entre les commandes

images/Terminal_VBRAY_16F874_AT89C2051_Prog_180129.jpg


Capture de FILL BUFFER
Use of IKALOGIC SQ50 4 chanels logic analyser
BLUE Trace use Protocol UART ( connected to RX PIC UART) <- RC7 RX --- TS59--USB Virtual COM3 -VBRAY Terminal
YELLOW Trace is the CTS PIC output -> Max232 -> DB9- TS59--USB -virtual PORT COM3-VBRAY Terminal
RED trace is RTS .. but never change .. Terminal never be busy
GREEN Trace as Event Synchro to start the capture SQ50 = RC3 output


Add Capture Event into the ASM PIC code



SQ50 ANALYSE :

Option 8 du menu
message : SEND HEX FILE
Selection du fichier sur Terminal VBray (Send File) Choix du fichier _FLASH_LEDS.HEX ..<,Enter> Envoir fichier
CTS =1 ..donc envoi bloqué...
32sec later ...DEVICE ERASED
CTS=0 .. libere l'envoi , toute les 142 mS
La sequence dure 12,87mS

La reception est conforme ..mais

images/t_SQA_test_Reception_fichier_Hex_all.gif images/t_SQA_test_Reception_fichier_Hex_Zoom.gif
Capture OK de tout le fichier (en lecture!) Zoom sur depart et 1er char

Reading back Progr Data inside AT89C2051 :
via Option 1
Show that 1rst Trame is Correcte (OK), but .
Second Trame is altered after the Third byte = problemo


.... Next Step .. go further analyse in the program



Programmateur AT89C2051 avec un PIC16F877 en C

Usage d'un 16F877 , le C utilisera toujours plus de place pour une meme application écrite en ASM.
Flash ROM=8K , RAM= 368 , EEPROM=256

Ecriture du programme , à partir de zero ( ou du moins via l'acquis fait par la version asm), mais en C (MikroC)
Le C permettant d'etre plus à l'aise (pour moi!) qu'avec l'ASM .
et surtout, plus facile pour tracer ce qui se passe à tous les niveaux intermediare du programme , en l'utilisant l'UART comme debugger

Modif principale:
Usage du mode Interrupt UART Hardware pour lire chaque ligne du fichier *.HEX , se terminant par <LF> ( Line Feed 0x0A).
en conservant le mode Handshaking RTS/CTS .
Il est ainsi possible de traiter chaque ligne du fichier , individuellement .
Au niveau Hardware :
Tiré les commandes des 2 Mosfet pilotant le +5V/12, au +5V pour couper les alim 5V 12V par défaut
1 niveau 1 par defaut => VPP OFF et choix sur 5V

Triks & Tips:

je m'apercois assez vite que meme avec un 16F877 ayant suffisamenrt de RAM , il y a des problemes de franchissement de BANK RAM !
c'est un probleme récurent avec MikroC ( voir forum MikroC !)
// ---- ABANDON, TROP CHIANT avec un 16F ! --- et IRP bit problems Bank RAM!



Programmateur AT89C2051 avec un PIC18F46K22 en C
version CTS

On est maintenant dans une situation plus que confortable !
Flash ROM=64K , RAM= 3876 , EEPROM=1024

Maj Hardware :
Programmer_AT89C2051_18F46K22_Hardware.txt

18F46K22 Pinout :



Le Prototype Programmateur
sur breadboards ( Meme pas peur !)
Attention aux muavais contacts !
J'utilise 2 alimentations distinctes : +12V et +5V,
mais le +5V pourrait fort bien etre derivé du+12V via un regulateur DC/DC ex :7805
J'ai vampirisé le circuit MAX232 (sur un autre montage à base de PIC16F628)
rajouté es 2 fils RTS/CTS et l'interface TUS9 (bleu) RS23/USB
Ce montage ne tolère aucune secousses ou deplacement ! ( en attendant un VRAI CIRCUIT IMPRIME)

images/t_Prototype_Programmer_AT89C2051_18F46K22_180212.gif images/t_AT89c2051_18f46k22_programmer_180212.gif
prototype sur 2 breadboards + MAX232 / platine16F628 schema ISIS



Triks & Tips:

probleme de compilateur MikroC:
// Compilation bloque avec error signalée en ligne 46
// 46 304 error: Unterminated character constant ')), ...
// ...skipped the line C:\_MikroC\_MesProjets_MikroC\_Programmer_AT89C2051\AT89C2051_Programmer_16F874_180205.c
// pour une erreur reelle en ligne 464 test sur ascii '7' , manque 2em elidé
// if (((c1>='0') && (c1<='7) ) || (c1=='M'))

Impossible de lire la derniere ligne du fichier HEX ??
si je ne detecte pas la combinaison suivante:
adresse=0x0000, Nb de bytes dans la trame =0 et le flag de fin à 0x01 ..
je ne peux pas certifier que a lecture du fichier HEX est OK
=> modif :
Armement UART apres armement Timer1 => inversion des 2 procedures
et Réactivation de CTS=0 dans l'armement interrupt au dernier moment
pour ne pas manquer le 1er caractere ':' de la derniere ligne
(remplissage buffer bien plus rapide ,car ligne tres courte de 5 bytes au lieu de 60)

ACHTUNG :
Usage de LATx au lieu de PORTx ! avec ce PIC18

Probleme calcul cheksum sur les donnees ecrites dans le MCU
CheckSum_W=~CheckSum_W+1; <-- BAD !
CheckSum_W=(~CheckSum_W)+1; <-- OK
Le compilateur ne sait pas gerer les priorites de calcul , sans parentheses explicites.

La Re-lecture de la donnée écrite dans le MCU est mauvaise !
A la lecture j'obtien une donnee = Donne Ecrite + 0x80 ????.
L'Usage de l'analyseur logique SQ50 montre que le signal BUSY P31 dure 2,76mS !
alors que mon delay de lecture est de 2ms apres ecriture de la donnee dans le MCU
Modification Hardware : Relié BUSY P31 AT89C -> PIC RC3 .
(apres deplacement de la sortie SQA de RC3 sur RA3 ) et donc modif config PORTC : RC3 as inpout
Apres cette modif : Data relue = Data ecrite ..OK

Tests réel sur 4 MCU AT89C2051 (pastille de couleur dessus pour les reperer)
1 MCU ATmel Bleu ..OK, mais pas de signature
2 MCU ATmel Orange..OK, SIGNATURE OK
3 MCU ATmel Jaune .OK, SIGNATURE OK
4 MCU ATmel Violet.OK, SIGNATURE OK


exemple ::
fichier de test à charger dans le MCU : HORLOGE_4_Digit_Bascom.HEX
Resulat Terminal VRay : 20180211152510_mcu_Jaune.log

Dialogue Operateur avec TERMINAL VBRAY (version 2014 .93b ):

Apres avoir testé TeraTerm et RealTerm , qui tourne tres bien sous WIN10, j'ai quand meme opté
pour Terminal VBRAY, qui est le seul à pourvoir envoyer un fichier HEX , sans rajout de caracteres specifiques
( La config des 2 autres n'etant pas tres explicite)
D'autre part TERMINAL VBRAY permet :
* la config de Touches de fonctions = MENU
* l'usage de script (langage proche du pascal).
* Le log dans un fichier text , pouvant etre Horodaté.
* Le protocole RST/CTS
*La visu de l'etat CTS
nota: choix font via set font : system pour un affichage plus homogene

Terminal VBRAY

Ecran d'acceuil :
images/t_Terminal_VBRAY_16F874_AT89C2051_Prog_180223.gif
Configuration Terminal VBRAY :


Les touches de fonctions sont disposées dans l'ordre d'actions!

images/TF_VBRAY_Programmer.jpg
progr_AT89C2051.tmf

Mode d'EMPLOI :

Le nouveau MCU doit etre present et enfiché correctement sur le programmateur .
Alimentation +5V et +12 V en service

VBray terminal doit etre lancé et ouvert à 9600,8,N,1
avec protocole hardware: Handshake RTS/CTS
Le choix d'une Font "Fixed sys" permet d'avoir un alignement correct des lignes d'ecriture . (meme espace pour chaque lettre)
Activer le Logging et donner un nom de fichier ou conserve rcelui proposé.

1) SIGNAT :

exemple de signature :
SIGNATURE BYTES

1E ATMEL DEVICE
21 89C2051
FF
POWER DOWN
Waiting input 4


*certain AT89C2051 n'ont pas de signature !

2) VIERGE
Attention, l'AT89C2051 peut ne PAS etre déclaré VIERGE , si l'ICSP est resté connecté sur RB6 & RB7

3) ERASE :
Suite à cette commande,le test VIERGE doit etre positif .

4) WRITE :
La case HandShake RTS/CTS doit etre cochée !
vous disposez de 15 secondes pour :
cliquer sur la touche SEND,
choisir le fichier *.HEX désiré,
et valider par la touche ENVOI.
Le chargement commance aussitot, ligne par ligne, du fait de la gestion RTS/CTS
* Si le MCU n'est pas Vierge => Abort !
* Si le checksum des datas à ecrire est different du checksum fichier=> Abort
*Si la commande Test feedback est active (via SW1) , une differnce entre Ecriture/Lecture => Abort

5) READ
Permet d'optenir le listing du programme , en hexadecimal , 16 bytes par ligne.


Rajout de la possibilité de test Lecture feed back suite ecriture dans le MCU
Usage de SW1 pour definir AVEC SANS CONTROLE relecture (Feeback)
// SW2= 1 => sans CONTROLE ( SW1 ouvert, pull up de 4,7K sur RA0)
// SW2= 0=> AVEC CONTROLE (SW1 fermé vers Gnd)
un message explicite apparait AVANT d'ecrire dans le MCU
Nota:
la lecture BACK peut amener à une sortie sur Erreur ..mais non vraiment fondée
* test avec ATMEL ORange :
sortie sur errer ligne 67 , avant derniere ligne !
0C03F900E517640560A480D0217880FE28
E5.E5 17.17 64.64 05.05 60.60 A4.A4 80.80 D0.D0 21.21 78.78 80.80 FE.FE >28
:0B040500083D44243122023C00207F0F
08.88 Error Back Trame 67
POWER DOWN
Retour Erreur= 2


* une 2em tentative d'ecriture ..va justqu'au bout ,sans Erreur... OK

Fichier *.Log issus de Sequence complete de programmation AT89C2051:
avec commentaires
fichier Word : AT89C2051_Programmer_18F46K22_Terminal_Vbray_Tests
Fichier text : AT89C2051_Programmer_18F46K22_Terminal_Vbray_180211_Tests_OK
Fichier log : Horloge_6digits_SHE878_ATMEL_JAUNE_180223_c.log

SOFTWARE :
maj: 23-02-2018
projet MikroC zippé: _Programmer_AT89C2051_180223.zip
Source C ,commenté : AT89C2051_Programmer_18F46K22_180223.c
chargeur *.Hex : AT89C2051_Programmer_18F46K22_180223.hex



Remerciements à Victor MOISEY qui m'a mis le pied à l'etrier et conforté dans mon projet..



Nouvelle Version Programmateur AT89C2051 via PIC18F46K22 en C
Version XON-XOFF

07/06/2018
Maj Hardware :
Simplification . La seule difference est la suppression de la sortie CTS (et entree RTS)
pour n'utiliser maintenant qu'un simple cordon TTL/USB Prolific , au lieu d'un MAX232
et l'usage de FOSC interne 4MHz , au lieu d'un quartz 4Mhz)
Programmer_AT89C2051_18F46K22_Hardware.txt

La gestion CTS est simplement remplacée par l'envoi de XON ou XOFF sur le TX UART
TXREG1=XON autorise l'envoi,
TXREG1=XOFF bloque l'envoi.
avec :
#define XOFF 19
#define XON 17

images/t_AT89C2051_18F46K22_Programmer_XON_XOFF_180607.gif

fichier ISIS
AT89C2051_18F46K22_Programmer_XON_XOFF_180607.DSN

Les modifications portent donc surtout sur la reception du fichier HEX , envoyé par le terminal VBRAY

images/t_Programmateur_AT89_Terminal_VBRAY_Xon_XOFF_en_action_180607.gif


Rappel des option de ce programmateur :

1 - READ MCU PROGR.,HEX Mode
2 - *VERIFY, HEX mode
3 - READ MCU SIGNATURE
4 - BLANK MCU CHECK
5 - *LOCK BITS
6 - PROGRAM MCU HEX Mode
7 - ERASE MCU

M - MENU

*J'ai zappé les options 2 et 5 , car lorqu'on ecrit le programme dans le MCU
on verifie ONLINE le contenu ..
et je n'ai pas besoin de verouiller le code ..

Fichier log recupéré pendant la programmation d'un AT89C2051 (jaune)
Resultat OK, meme avec le controle Feedback activé ( Pin RA0 mise au 0V)

SOFTWARE :
Projet Zippé: AT89C2051_18F46K22_Programmer_XON_XOFF_180606.zip
Source : AT89C2051_Programmer_18F46K22_180606.c
Chargeuir : AT89C2051_Programmer_18F46K22_180606.hex

 

 

 

 

 

 

 



Les Outils disponibles :

Compilation Source ASM pour AT89C2051


les outils rescent ne concerne que les AT890xxxx , ATiny..,
ATTENTION , j'ai perdu beaucoup de temps avec un fichier asm recupéré pour l'exemple
voir la raison..plus bas.

test avec A51 _Clock.asm

compile mais 4 errors

A51 MACRO ASSEMBLER _CLOCK DATE 30/01/18 PAGE 1


MS-DOS MACRO ASSEMBLER A51 V4.4
OBJECT MODULE PLACED IN _CLOCK.OBJ
ASSEMBLER INVOKED BY: A51 _CLOCK.ASM

ASSEMBLY COMPLTE , 5 ERRORS FOUND !

LOC OBJ LINE SOURCE

1 ?; 30-01-2018
*** _________________________^
*** __________________________^
*** ___________________________^
*** ERROR #4, LINE #1, BAD (OR MISUSED SPECIAL) CHARACTER
*** ERROR #4, LINE #1, BAD (OR MISUSED SPECIAL) CHARACTER
*** ERROR #4, LINE #1, BAD (OR MISUSED SPECIAL) CHARACTER
2
; http://ele-tech.com/html/adopt-6-electronic-clocks-of-at89c2051.html
3 ;Source program of the electronic clock
4 ; -----------------------------------------
5 ; AT89C2051 clock procedure
...
*** _________________________________^
*** _________________________________^
233 MOVC A,@ADPTR ; Check that reveals the data correspond to one section of codes <-- ERROR
*** ERROR #5, LINE #233, BAD INDIRECT REGISTER
*** ERROR #46, LINE #233, UNDEFINED SYMBOL (PASS-2)


correction :
; error : MOVC A,@ADPTR ; Check that reveals the data correspond
to one section of codes
MOVC A,@A+DPTR ; Check that reveals the data correspond to one
section of codes


2nd Compilation:
Impossible de le compiler ..tout le temps 1 error LINE 1
Meme en supprimant ou modifiant cette ligne !
*** ERROR #4, LINE #1, BAD (OR MISUSED SPECIAL) CHARACTER

Demande de l'aide sur forum KEIL ..
Des reponses plus ou moins desobligeantes .. de la part de Geek prétentieux.
Mais une bonne reponse quand meme (Thank's P.Summer ) : voir si codage UTF utilisé..
C'est le cas, ce fichier est encode UTF-8 .. CE QUI N'EST PAS VISIBLE AU PREMIER ABORD
Je le passe en format ANSI..
et la compilation est OK

Un tres bon outil pour compiler :



click on the logo !

fichier en entrée : _Clock_ansi.asm
resultat en retour : asem_Clock_ansi_25257.zip qui contient :
webasm25257.hex (chargeur)
webasm25257.lst (listing)
webasm25257.A51 (source asm)




Un autre outil TRES INTERESSANT , Editeur ,SIMULATEUR :
ecrit en java EdSim51DI version 2.1.20
se lance via : edsim51di.jar
Charge _Clock_ansi.asm
Compile : No errors
RUN
animation afficheur 7 segments..


images/t_EDSim51_capture.gif



Le nouveau programme HORLOGE



../common/GIF/LTC1286p.jpg

retour a l'index