Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
Config afficheur 1 ligne 16 caractères
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour à tous,
Bien lgtps que je me suis connecté sur le forum; Depuis mai j'ai été atteint d'un cancer qui m'a cloué à l’hôpital plusieurs mois et je suis à présent de retour depuis la mi-août. Entre tps, j'ai déménagé et depuis qq semaines je me suis remis à mes activités favorites.
Rappelez vous de mes sujets avec l'afficheur graphique qui s'est fini avec un LCD 4 lignes 40 caractères et ma télécommande RC5. Tout ça a été mis en standby et je vais pouvoir m'y remettre bientôt.
Actuellement, je réalise un petit montage pour un ami avec un afficheur et un 16f877. Le montage est archi simple, il y a 6 entrées audio qui sont sélectionné par une roue codeuse pour s'afficher sur un LCD (GDM1601C) 1 ligne 16 caractères.
Est-ce mes séances de chimio qui affecte mes connaissances ou la fatigue tjrs omniprésente mais je suis complètement perdu sur la mise en oeuvre du montage.
Impossible d'afficher quoi que ce soit sur ce maudit afficheur. Si je change l'afficheur par un 2 lignes 16 caractères type GDM1602A, j'ai parfois l'affichage mais le fonctionnement est très bizarre; le premier caractère s'affiche puis qq secondes après apparaît le second et ainsi de suite jusqu'à remplir la ligne complète. Au total, il faut bien 10 bonnes secondes pour remplir la ligne! J'ai vérifié la configuration de l'afficheur et je ne vois pas ce qui peut affecter le fonctionnement
J'utilise le portB du 16f877 pour générer les codes de l'afficheur est-ce la config du PIC?
J'ai pourtant réalisé de nbreux programmes avec un afficheur mais jamais j'ai utilisé le portB pour envoyer les codes à l'afficheur. Sur ce montage j'ai utilisé le port B pour une raison de commodité du routage du pcb.
Voici mon programme
En vous remerciant tous pour votre aide
Bien lgtps que je me suis connecté sur le forum; Depuis mai j'ai été atteint d'un cancer qui m'a cloué à l’hôpital plusieurs mois et je suis à présent de retour depuis la mi-août. Entre tps, j'ai déménagé et depuis qq semaines je me suis remis à mes activités favorites.
Rappelez vous de mes sujets avec l'afficheur graphique qui s'est fini avec un LCD 4 lignes 40 caractères et ma télécommande RC5. Tout ça a été mis en standby et je vais pouvoir m'y remettre bientôt.
Actuellement, je réalise un petit montage pour un ami avec un afficheur et un 16f877. Le montage est archi simple, il y a 6 entrées audio qui sont sélectionné par une roue codeuse pour s'afficher sur un LCD (GDM1601C) 1 ligne 16 caractères.
Est-ce mes séances de chimio qui affecte mes connaissances ou la fatigue tjrs omniprésente mais je suis complètement perdu sur la mise en oeuvre du montage.
Impossible d'afficher quoi que ce soit sur ce maudit afficheur. Si je change l'afficheur par un 2 lignes 16 caractères type GDM1602A, j'ai parfois l'affichage mais le fonctionnement est très bizarre; le premier caractère s'affiche puis qq secondes après apparaît le second et ainsi de suite jusqu'à remplir la ligne complète. Au total, il faut bien 10 bonnes secondes pour remplir la ligne! J'ai vérifié la configuration de l'afficheur et je ne vois pas ce qui peut affecter le fonctionnement
J'utilise le portB du 16f877 pour générer les codes de l'afficheur est-ce la config du PIC?
J'ai pourtant réalisé de nbreux programmes avec un afficheur mais jamais j'ai utilisé le portB pour envoyer les codes à l'afficheur. Sur ce montage j'ai utilisé le port B pour une raison de commodité du routage du pcb.
Voici mon programme
En vous remerciant tous pour votre aide
Code : Tout sélectionner
;----------------------------------------------------Brochage du PIC sur la carte---------------------------------------------------------
; Port | Broche | E/S | Description
; RA0 | 02 | S | Cde R/S
; RA1 | 03 | S | Cde Enable
; RA2 | 04 | E | Bit A ampli 1 et 2
; RA3 | 05 | E | Bit B ampli 1 et 2
; RA4 | 06 | E | Bit C ampli 1 et 2
; RA5 | 07 | E |
; RB0 | 33 | S | Sortie bit D7 du LCD
; RB1 | 34 | S | Sortie bit D6 du LCD
; RB2 | 35 | S | Sortie bit D5 du LCD
; RB3 | 36 | S | Sortie bit D4 du LCD
; RB4 | 37 | S | Sortie bit D3 du LCD
; RB5 | 38 | S | Sortie bit D2 du LCD
; RB6 | 39 | S | Sortie bit D1 du LCD
; RB7 | 40 | S | Sortie bit D0 du LCD
; RC0 | 15 | S | NC
; RC1 | 16 | S | NC
; RC2 | 17 | S | PHONO
; RC3 | 18 | S | AUX
; RC4 | 23 | S | DVD
; RC5 | 24 | S | CD2
; RC6 | 25 | S | CD1
; RC7 | 26 | S | TUNNER
; RD0 | 19 | E | Reception Bit A 16F84
; RD1 | 20 | E | Reception Bit B 16F84
; RD2 | 21 | E | Reception Bit C 16F84
; RD3 | 22 | S | Autorisation Ampli3
; RD4 | 27 | E | Detection Ampli1
; RD5 | 28 | E | Detection Ampli2
; RD6 | 29 | S | Autorisation Ampli1 et activation RL1
; RD7 | 30 | S | Autorisation Ampli2 et activation RL2
;--------------------------------------------------DIRECTIVE D'ASSEMBLAGE POUR MPLAB-------------------------------------------------------
list p=16f877
#include <p16f877.inc>
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;-------------------------------------------------DEFINITION DES REGISTRES TEMPORAIRES------------------------------------------------------
PORTA EQU 0X05 ; Le registre temporaire PORTA se trouve à l'adresse 05
PORTB EQU 0X06 ; Le registre temporaire PORTB se trouve à l'adresse 06
PORTC EQU 0X07 ; Le registre temporaire PORTC se trouve à l'adresse 07
PORTD EQU 0X08 ; Le registre temporaire PORTD se trouve à l'adresse 08
PORTE EQU 0X09 ; Le registre temporaire PORTE se trouve à l'adresse 09
TRISA EQU 0X85 ; Le registre temporaire TRISA se trouve à l'adresse 85
TRISB EQU 0X86 ; Le registre temporaire TRISB se trouve à l'adresse 86
TRISC EQU 0X87 ; Le registre temporaire TRISC se trouve à l'adresse 87
TRISD EQU 0X88 ; Le registre temporaire TRISD se trouve à l'adresse 88
TRISE EQU 0X89 ; Le registre temporaire TRISE se trouve à l'adresse 89
CPT2 EQU 0X0D ; Le registre temporaire CPT2 se trouve à l'adresse 0D
CPT3 EQU 0X0E ; Le registre temporaire CPT3 se trouve à l'adresse 0E
RETARD1 EQU 0X0C ; Le registre temporaire retard1 se trouve à l'adresse 0C
RETARD2 EQU 0X0F ; Le registre temporaire retard2 se trouve à l'adresse 0F
RETARD3 EQU 0X10 ; Le registre temporaire retard3 se trouve à l'adresse 10
RETARD4 EQU 0X11 ; Le registre temporaire retard4 se trouve à l'adresse 11
RETARD5 EQU 0X12 ; Le registre temporaire retard4 se trouve à l'adresse 12
VAL1 EQU 0X14 ; Le registre temporaire VAL1 se trouve à l'adresse 14
VAL2 EQU 0X15 ; Le registre temporaire VAL2 se trouve à l'adresse 15
VAL3 EQU 0X16 ; Le registre temporaire VAL1 se trouve à l'adresse 14
VAL4 EQU 0X17 ; Le registre temporaire VAL2 se trouve à l'adresse 15
;--------------------------------------------PROGRAMME PRINCIPAL----------------------------------------
ORG 0000h ; Adresse de reset
GOTO INIT
;-----------------------------------------PROGRAMME D'INITIALISATION----------------------------------------
INIT
CLRF PORTA ; On remet à 0 le port A
CLRF PORTB ; On remet à 0 le port B
CLRF PORTC ; On remet à 0 le port C
CLRF PORTD ; On remet à 0 le port D
CLRF PORTE ; On remet à 0 le port E
BSF STATUS,RP0 ; Selection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1
MOVLW B'11111100' ; On charge la valeur dans le registre W
MOVWF TRISA ; On transfert W sur le registre TRISA pour définir la direction du portA
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISB ; On transfert W sur le registre TRISB pour définir la direction du portB
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISC ; On transfert W sur le registre TRISC pour définir la direction du portC en sortie
MOVLW B'00110111' ; On charge la valeur dans le registre W
MOVWF TRISD ; On transfert W sur le registre TRISD pour définir la direction du portD en sortie
BCF STATUS,RP0 ; Déselection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1
;---------------------------------------------------------Programme PRINCIPAL-------------------------------------------------------
DEBUT
MOVLW B'00001000' ; On charge la valeur dans W
MOVWF PORTD ; On déplace la valeur sur le PORTD
;--------------------------------------------------------- Programme affichage selection -------------------------------------------------------
TUNER
MOVLW b'00010000'
MOVWF PORTC
CALL TEMPO1
CALL CONFIG ; Va à CONFIG
MOVLW 0X00 ; Déplace le curseur à la 1ère colonne de la 1ere ligne
MOVWF PORTB ; Charge le contenu de W dans le port B
BSF PORTA,1 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTA,1 ; Enable = 0
MOVLW 'S' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'R' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
MOVLW 'R' ; Affiche caractère
CALL CAR_AFF ; Va à CAR_AFF
; CALL ATTENTE6 ; On appelle TEMPO1
BOOT
GOTO BOOT ;
;-------------------------------------------------------CONFIGURATION AFFICHEUR -----------------------------------------------------------
CONFIG
MOVLW B'00110000' ; Fonction SET 8 bits 1 ligne police 5X7
MOVWF PORTB ; Charge le contenu de W dans le port B
BSF PORTA,1 ; E = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTA,1 ; E = 0
MOVLW B'00001000' ; Affichage off
MOVWF PORTB ; Charge le contenu de W dans le port B
BSF PORTA,1 ; E = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTA,1 ; E = 0
MOVLW B'00000001' ; Efface l'écran et positionne le curseur à 0
MOVWF PORTB ; Charge le contenu de W dans le port B
BSF PORTA,1 ; E = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTA,1 ; E = 0
MOVLW B'00000110' ; Déplacement curseur vers la droite
MOVWF PORTB ; Charge le contenu de W dans le port B
BSF PORTA,1 ; E = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTA,1 ; E = 0
MOVLW B'00001100' ; Contrôle de l'affichage (affichage on, curseur non visible)
MOVWF PORTB ; Charge le contenu de W dans le port B
BSF PORTA,1 ; E = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTA,1 ; E = 0
RETURN
;------------------------------------------------------Ecriture dans l'afficheur -------------------------------------
CAR_AFF
MOVWF PORTB ; Charge le contenu de W dans le port B
CALL ATTENTE3 ; Appel de la temporisation ATTENTE5
MOVLW B'00000011' ; RS = 1, RW = 0, E1 = 1, E2 = 0
MOVWF PORTA ; Et on transfert sur le port C le contenu de W
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
MOVLW B'00000000' ; RS = 0, RW = 0, E1 = 0, E2 = 0
MOVWF PORTA ;
RETURN
;---------------------------Programme de temporisation 1-------------------------------------
TEMPO1
MOVLW 0X7F ; On met FF dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVWF RETARD3 ; On met W dans le registre retard3
MOVWF RETARD4 ; On met W dans le registre retard4
ATTENTE1
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction si le registre retard1 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X80 ; On met 80 dans le registre W
MOVWF RETARD1 ; On met W dans RETARD1
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction si le registre retard2 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X08 ; On met 08 dans le registre W
MOVWF RETARD2 ; On met W dans RETARD2
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction si le registre retard3 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X08 ; On met 08 dans le registre W
MOVWF RETARD3 ; On met W dans RETARD3
DECFSZ RETARD4,F ; On décrémente retard4 et on saute la prochaine instruction si le registre retard4 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
RETURN ; Retour au programme principal
;------------------------------programme de temporisation 2---------------------------
TEMPO2
MOVLW 0X7F ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X12 ; On met 12 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE2
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
MOVLW 0XC8 ; On recharge retard1
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
RETURN ; Retour au programme principal après l'instruction call
;------------------------------programme de temporisation 3---------------------------
TEMPO3
MOVLW 0X7F ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X80 ; On met 80 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE3
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
MOVLW 0XC8 ; On recharge retard1
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
RETURN ; Retour au programme principal après l'instruction call
;---------------------------Programme de temporisation 4-------------------------------------
TEMPO4
MOVLW 0X5A ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X15 ; On met 12 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE4
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
MOVLW 0X6E ; On recharge retard1 6e
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
RETURN ; Retour au programme principal après l'instruction call
ATTENTE5
MOVLW 0XFF ; On met FF dans le registre W
MOVWF CPT2 ; On met W dans le registre CPT2
ATT2
DECFSZ CPT2,1 ; On décrémente CPT2,1 et on saute la prochaine instruction
GOTO ATT2 ; Sinon retour à ATT2
RETURN ; Retour au programme principal après l'instruction call
ATTENTE6
MOVLW 0X1E ; On met 14 dans le registre W
MOVWF CPT3 ; On met W dans le registre CPT3
ATT3
CALL ATTENTE5 ; On appelle ATTENTE5
DECFSZ CPT3,1 ; On décrémente CPT3,1 et on saute la prochaine instruction
GOTO ATT3 ; Sinon retour à ATT3
RETURN ; Retour au programme principal après l'instruction call
END
Config afficheur 1 ligne 16 caractères
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
A force de chercher j'ai fini par trouver le pb du chargement de ligne caractère par caractère avec un tps très long.
Dans l'étiquette "Car_aff"
J'appelle la tempo "ATTENTE3" au lieu de "ATTENTE5
Effectivement, à chaque chargement de caractère il pouvait mettre un tps fou
Mais je n'ai tjrs pas résolu le pb avec l'afficheur 1 ligne
Dans l'étiquette "Car_aff"
J'appelle la tempo "ATTENTE3" au lieu de "ATTENTE5
Effectivement, à chaque chargement de caractère il pouvait mettre un tps fou
Mais je n'ai tjrs pas résolu le pb avec l'afficheur 1 ligne
Config afficheur 1 ligne 16 caractères
Bonjour nondediode, et tout le forum,
J'espère que tu vas mieux, et je suis bien content de te revoir sur le forum,
As tu le datasheet du GDM1601C , parce que sur la toile j'ai pas trouvé grand chose, juste une page.
Veux tu le faire fonctionner en 8 bits ou 4 bits ?
J'ai écrit une routine pour LCD 2 x 16, avec quartz 4Mhz, elle doit fonctionner pour ton écran, veux tu l'essayer ?
Pour le code, très propre, et très lisible.
A+
J'espère que tu vas mieux, et je suis bien content de te revoir sur le forum,
As tu le datasheet du GDM1601C , parce que sur la toile j'ai pas trouvé grand chose, juste une page.
Veux tu le faire fonctionner en 8 bits ou 4 bits ?
J'ai écrit une routine pour LCD 2 x 16, avec quartz 4Mhz, elle doit fonctionner pour ton écran, veux tu l'essayer ?
Pour le code, très propre, et très lisible.
A+
Config afficheur 1 ligne 16 caractères
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
Certains afficheur LCD 1x16 , sont en fait des 2 x8 chars !
PB rencontré sur un frequencemetre
Cette version,particuliere à un faux LCD 1 ligne de 16 car, car en fait est composé de 2x8 cars sur la meme ligne
mais declaré comme un 2 lignes au niveaux adressage.
; remise en ordre pointeur debut 80H et C0H au lieu de 00H et 40H
voir details ici
Certains afficheur LCD 1x16 , sont en fait des 2 x8 chars !
PB rencontré sur un frequencemetre
Cette version,particuliere à un faux LCD 1 ligne de 16 car, car en fait est composé de 2x8 cars sur la meme ligne
mais declaré comme un 2 lignes au niveaux adressage.
; remise en ordre pointeur debut 80H et C0H au lieu de 00H et 40H
voir details ici
Config afficheur 1 ligne 16 caractères
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour à vous 2 et merci
Depuis, j'ai aussi cherché de mon côté et effectivement j'ai lu à plusieurs reprises que ce type d'afficheur dont je ne trouve aucuns datasheet sur la toile est effectivement un 2 X 8 caractères et j'ai essayé d'écrire ma ligne en 2 temps en mettant le pointeur à 00 pour "source" et en le déplaçant à 09 pour "TUNER" et ça fonctionne pas mais je n'ai rien essayé d'autre.
Dans la config de l'afficheur pour la fonction set j'ai rentré ceci:
00110100
Mode 8 bits
NL=0 pour 1 ligne
F=1 pour des caractères 5 X 10 mais j'ai aussi essayé avec F=0
Quand je configure en mode 2 lignes ça ne fonctionne pas non plus
Je mets un doute sur l'afficheur car en passant avec un afficheur 2 lignes et qq petites réparations j'obtient ce que je veux.
Cet afficheur 1 ligne, je l'ai récupéré sur un kit Wellman mais je ne sait plus ce que j'ai fait du montage sinon j'aurais bien aimé refaire un test sur son montage d'origine pour voir si il est encore vivant.
J'ai donc un peut abandonné l'idée de cet afficheur 1 ligne mais ma curiosité fait que même si je passe au 2 lignes j'aimerais quand même savoir comment configurer ce type d'afficheur
Au pire je peut en commander 1 pour tester ça vaut une misère.
A très bientôt
JP
Depuis, j'ai aussi cherché de mon côté et effectivement j'ai lu à plusieurs reprises que ce type d'afficheur dont je ne trouve aucuns datasheet sur la toile est effectivement un 2 X 8 caractères et j'ai essayé d'écrire ma ligne en 2 temps en mettant le pointeur à 00 pour "source" et en le déplaçant à 09 pour "TUNER" et ça fonctionne pas mais je n'ai rien essayé d'autre.
Dans la config de l'afficheur pour la fonction set j'ai rentré ceci:
00110100
Mode 8 bits
NL=0 pour 1 ligne
F=1 pour des caractères 5 X 10 mais j'ai aussi essayé avec F=0
Quand je configure en mode 2 lignes ça ne fonctionne pas non plus
Je mets un doute sur l'afficheur car en passant avec un afficheur 2 lignes et qq petites réparations j'obtient ce que je veux.
Cet afficheur 1 ligne, je l'ai récupéré sur un kit Wellman mais je ne sait plus ce que j'ai fait du montage sinon j'aurais bien aimé refaire un test sur son montage d'origine pour voir si il est encore vivant.
J'ai donc un peut abandonné l'idée de cet afficheur 1 ligne mais ma curiosité fait que même si je passe au 2 lignes j'aimerais quand même savoir comment configurer ce type d'afficheur
Au pire je peut en commander 1 pour tester ça vaut une misère.
A très bientôt
JP
Config afficheur 1 ligne 16 caractères
Bonsoir à tous,
Content de recevoir de bonnes nouvelles, nondediode, j'espère que ce ne sera qu'un mauvais souvenir.
Pas la peine de définir l'adresse des registres PORTA à TRISE, c'est déjà fait par le fichier include <p16f877.inc>
Par contre les variables définies en 0x00C, 0x00D, ... sont incorrectes car ces adresses sont déjà occupées par des registres du pic, voir datasheet chapitre memory organization.
Dans le cas du 16F877, la ram disponible pour les variables démarre en 0x020
Content de recevoir de bonnes nouvelles, nondediode, j'espère que ce ne sera qu'un mauvais souvenir.
Pas la peine de définir l'adresse des registres PORTA à TRISE, c'est déjà fait par le fichier include <p16f877.inc>
Par contre les variables définies en 0x00C, 0x00D, ... sont incorrectes car ces adresses sont déjà occupées par des registres du pic, voir datasheet chapitre memory organization.
Dans le cas du 16F877, la ram disponible pour les variables démarre en 0x020
Config afficheur 1 ligne 16 caractères
satinas, effectivement il y a bien une erreur, pour ta déclaration de tes variables utilise plutôt CBLOCK début de la zone (H'20' à H'6F') en bank0 soit près de 80 octets de disponible
Encore exacte...., il est fort ce satinas .
Avec un éditeur de texte regarde le fichier P16F877.inc que tu as inclus dans ton code au début, tu vas voir que toutes tes déclarations
des registres sont déjà fait, et heureusement pour nous.
Fichier P16F877.inc ci-joint
A+
Code : Tout sélectionner
CBLOCK H'20'
CPT2 :1 ; Le registre temporaire CPT2 se trouve à l'adresse H'20'
CPT3 :1 ; Le registre temporaire CPT3 se trouve à l'adresse H'21'
RETARD1 :1 ; Le registre temporaire retard1 se trouve à l'adresse H'22'
RETARD2 :1 ; Le registre temporaire retard2 se trouve à l'adresse H'23'
RETARD3 :1 ; Le registre temporaire retard3 se trouve à l'adresse H'24'
RETARD4 :1 ; Le registre temporaire retard4 se trouve à l'adresse H'25'
RETARD5 :1 ; Le registre temporaire retard4 se trouve à l'adresse H'26'
VAL1 :1 ; Le registre temporaire VAL1 se trouve à l'adresse H'27'
VAL2 :1 ; Le registre temporaire VAL2 se trouve à l'adresse H'28'
VAL3 :1 ; Le registre temporaire VAL1 se trouve à l'adresse H'29'
VAL4 :1 ; Le registre temporaire VAL2 se trouve à l'adresse H'2A'
ENDC
satinas a écrit :Source du message Pas la peine de définir l'adresse des registres PORTA à TRISE, c'est déjà fait par le fichier include <p16f877.inc>
Encore exacte...., il est fort ce satinas .
Avec un éditeur de texte regarde le fichier P16F877.inc que tu as inclus dans ton code au début, tu vas voir que toutes tes déclarations
des registres sont déjà fait, et heureusement pour nous.
Fichier P16F877.inc ci-joint
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Config afficheur 1 ligne 16 caractères
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour tout le monde,
Merci pour cette remarque.
Depuis mon premier programme avec un PIC 16F877 je ne fait que recopier les directives d'assemblage de programme en programme sans me soucier des erreurs possible puisque ça tjrs marché comme ça
A présent je veillerait à bien déclarer mes variables
Vos conseils me sont tjrs très précieux; encore merci
Vu le mauvais tps annoncé pour aujourd'hui je vais pouvoir continuer sur mon prg avec l'afficheur 1 ligne en me servant des ordres de pointage que paulfjujo m'a adressé.
Je vous tiendrai au courant des évolutions
Bon dimanche à tous
Merci pour cette remarque.
Depuis mon premier programme avec un PIC 16F877 je ne fait que recopier les directives d'assemblage de programme en programme sans me soucier des erreurs possible puisque ça tjrs marché comme ça
A présent je veillerait à bien déclarer mes variables
Vos conseils me sont tjrs très précieux; encore merci
Vu le mauvais tps annoncé pour aujourd'hui je vais pouvoir continuer sur mon prg avec l'afficheur 1 ligne en me servant des ordres de pointage que paulfjujo m'a adressé.
Je vous tiendrai au courant des évolutions
Bon dimanche à tous
Config afficheur 1 ligne 16 caractères
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour à tous,
Après avoir bataillé avec le port A qu'il fallait impérativement configurer en I/O avec le registre ADCON1, je suis arrivé à faire fonctionner mon programme.
Depuis mai où je n'avais plus retouché 1 seul programme en asm, je m'aperçoit qu'on oublie vite les petites choses essentiels et c'est vite la galère quand on veut écrire un bout de programme
Heureusement il y a eu Fantaspic pour m'aider
Merci à vous tous et j'aurai certainement l'occasion de revenir sur le forum.
JP
Après avoir bataillé avec le port A qu'il fallait impérativement configurer en I/O avec le registre ADCON1, je suis arrivé à faire fonctionner mon programme.
Depuis mai où je n'avais plus retouché 1 seul programme en asm, je m'aperçoit qu'on oublie vite les petites choses essentiels et c'est vite la galère quand on veut écrire un bout de programme
Heureusement il y a eu Fantaspic pour m'aider
Merci à vous tous et j'aurai certainement l'occasion de revenir sur le forum.
JP
Config afficheur 1 ligne 16 caractères
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 128 invités