Futura Sciences
Image de la rubrique en cours

Forum FS Generation

Précédent   Vous êtes ici : Forum FS Generation » Futura Technique » Électronique

Découvrir d'autres sujets sur ces thèmes : , ,


Réponse
Vieux 29/10/2003, 14h23   Sujet Programme LCD ATMEL - Message #1
JP
 
Date d'inscription: février 2003
Localisation: Strasbourg
Âge: 26
Messages: 1 627
Salut,

J'ai un programme de gestion d'un afficheur LCD inteligent avec un 8515 et je me pose une question comment se fait la communication avec le LCD sans passé par des IN PORT ou des OUT PORT ?

[code:1:645ed3144b]; ****************************** ***********************
; * Demonstrates the use of the Include routines *
; * LCD_INC.ASM for use with the LCD on board of the *
; * ATMEL STK200 (C) 1999 Gerhard Schmidt *
; * Report bugs to info@avr-asm-tutorial.net *
; ****************************** ***********************
;
.NOLIST
.INCLUDE "C:\avrtools\appnotes\851 5def.inc"
.LIST
.def mpr=R16 ; My multipurpose register, required
; Reset-/Interrupt-Vectors
rjmp main
; Includes the LCD-routines, file must be in the same path
.INCLUDE "LCD_INC.ASM"
; Main program
main:
ldi mpr,LOW(RAMEND) ; Set up stack
out SPL,mpr
ldi mpr,HIGH(RAMEND)
out SPH,mpr
ldi mpr,0xC0 ; Switch on external SRAM and WAIT
out MCUCR,mpr
rcall lcd_cl ; Clears display
rcall lcd_st ; Standard display mode
ldi mpr,0x05; Cursor position to line 1, col 5
rcall lcd_sc
ldi mpr,'H' ; Output Hello World
rcall lcd_ch
ldi mpr,'e'
rcall lcd_ch
ldi mpr,'l'
rcall lcd_ch
rcall lcd_ch
ldi mpr,'o'
rcall lcd_ch
ldi mpr,0x45 ; Cursor position to line 2, col 5
rcall lcd_sc
ldi mpr,'W'
rcall lcd_ch
ldi mpr,'o'
rcall lcd_ch
ldi mpr,'r'
rcall lcd_ch
ldi mpr,'d'
rcall lcd_ch
ldi mpr,'!'
rcall lcd_ch
rcall lcd_on
loop:
rjmp loop ; Uff! Next week we learn how to create and read a table[/code:1:645ed3144b]

[code:1:645ed3144b]; ****************************** **************
; * LCD-Interface routines for multi-purpose *
; * use with the ATMEL STK200 board, Version *
; * 0.1 Beta, (C) 1999 Gerhard Schmidt *
; * Report bugs to info@avr-asm-tutorial.net *
; ****************************** **************
;
; Purpose:
; Include file for the AVR assembler
; Supplies the common routines to drive an
; LCD connected to the ATMEL STK200 board
; Works best and is compatible to external
; SRAM on that board (up to 32 kB)
;
; Requires:
; mpr ... Multipurpose register, anything
; between R16 and R31, unchanged
; after all routines
; Memory-mapped operation of the LCD
; Setup of the software stack due to the use
; of relative subroutines and PUSH/POP
; LCD properly connected to the board, otherwise
; processor hangs around and waits for
; the busy flag to go down! (no timeout!)
; 39 words of program space
;
; Interfaces:
; lcd_wt Waits indefinately until the busy
; flag of the LCD is off
; lcd_fc Sends the command byte in register
; mpr to the LCD after busy is off
; lcd_cl Clears the LCD and sets cursor to
; the home position, after busy is off
; lcd_st Sets the LCD to 8-bit-transfer,
; freezes the display window and sets
; cursor to increment after busy is off
; lcd_sc Sets cursor to the display position
; in register mpr (Line 1: 00 .. 0F hex,
; Line 2: 40 .. 4F hex)
; lcd_ch Outputs the character in register
; mpr to the LCD after busy is off
; lcd_on Sets display on, cursor on and blink
;
; Adress definitions:
.equ lcd_rs = 0x8000 ; Register select = 0 adress
.equ lcd_ds = 0xC000 ; Register select = 1 adress
;
; Subroutines
;
; Wait until LCD is not busy any more
;
lcd_wt:
push mpr ; save register
lcd_wt1:
lds mpr,lcd_rs ; read busy flag
rol mpr ; Busy = Bit 7 into Carry
brcs lcd_wt1 ; still busy, repeat
pop mpr ; restore register
ret
;
; Outputs the function command in mpr to the LCD
;
lcd_fc:
rcall lcd_wt ; Wait until not busy any more
sts lcd_rs,mpr ; Command byte to LCD
ret
;
; Clears LCD and sets cursor to home position
;
lcd_cl:
push mpr ; save register
ldi mpr,0x01 ; the clear command
rcall lcd_fc ; output to LCD command
pop mpr ; restore register
ret
;
; Sets LCD to 8-bit-mode, display window freeze and
; cursor incrementation (standard mode)
;
lcd_st:
push mpr ; save register
ldi mpr,0b00111000 ; 8-Bit-transfer
rcall lcd_fc ; to LCD command
ldi mpr,0b00000110 ; Increment, display freeze
rcall lcd_fc ; to LCD
ldi mpr,0b00010000 ; Cursor move, not shift
rcall lcd_fc ; to LCD
pop mpr ; restore register
ret
;
; Sets cursor on the LCD to a certain display position in mpr
;
lcd_sc:
push mpr ; save position
ori mpr,0x80 ; set bit 7 of the position
rcall lcd_fc ; position to LCD
pop mpr ; restore register
ret
;
; Sends a character in mpr to the display at the current
; position, position is incremented after write
;
lcd_ch:
rcall lcd_wt ; wait for not busy
sts lcd_ds,mpr ; transfer character to LCD-Display
ret
;
; Sets LCD display on, cursor on and blink on
;
lcd_on:
push mpr ; save register
ldi mpr,0b00001111 ; command byte
rcall lcd_fc ; to LCD
pop mpr ; restore register
ret[/code:1:645ed3144b]

Merci d'avance pour vos explications
JP est déconnecté   Réponse avec citation
Alt Aujourd'hui
Publicité

Beitrag Liens sponsorisés

   
Vieux 29/10/2003, 17h27   Sujet Programme LCD ATMEL - Message #2
Freud
 
Date d'inscription: janvier 2003
Messages: 22
Salut,

C'est de l'assembleur (et non du C), et donc il n'y a pas d'instruction comme INP/OUTP. Le caractère ASCII que tu envoies à l'afficheur LCD est stocké dans MPR, et l'interface hardware est probablement définie par les 2 adresses 0x8000 et 0xC000 qui correspondent (je pense) aux adresses de 2 ports I/O du processeur (à vérifier dans le fichier header "8515def.inc").

@+
David
Freud est déconnecté   Réponse avec citation
Vieux 29/10/2003, 17h30   Sujet Programme LCD ATMEL - Message #3
popo
 
Date d'inscription: janvier 2003
Messages: 50
Bonjour,

Sur ATMEL, pour utiliser un écran LCD, il existe un port rien que pour ça qui est partagé avec un port E/S. Il suffit quand tu initialise tes ports au début de ton programme. Tu peux regarder sur atmel.com dans la rubrique microcontroleur il y a la doc tech et des exemples d'applications sur les ecrans LCD.
Si tu programmes en C tu as des fonctions que tu peux utiliser pour programmer plus facilement.


A+
popo
popo est déconnecté   Réponse avec citation
Vieux 29/10/2003, 18h50   Sujet Programme LCD ATMEL - Message #4
JP
 
Date d'inscription: février 2003
Localisation: Strasbourg
Âge: 26
Messages: 1 627
Bonsoir tous,

Merci pour vos réponses,

Citation:
C'est de l'assembleur (et non du C),

C'est vrai !!!!

Citation:
donc il n'y a pas d'instruction comme INP/OUTP

Ben si DDRX pour la direction du port X
IN PORTX pour la lecture sur le port X
OUT PORTX pour l'envoi des données sur le port X

Citation:
l'interface hardware est probablement définie par les 2 adresses 0x8000 et 0xC000

On peut envoyé directement les données a l'adresse du registre du port
mais le 0x8000 et 0xC000 d'apres le mapping memoire corresdondent à des adresses de la SRAM externe.

Citation:
2 ports I/O du processeur

Microconcroleur


Citation:
Sur ATMEL, pour utiliser un écran LCD, il existe un port rien que pour ça qui est partagé avec un port E/S.

J'ai pensé a un truc de ce genre la, mais je n'ai rien trouvé sur le site d'Atmel dans les Appnotes. (J'ai peut etres mal cherché)

J'ai trouvé ca mais c'est en allemand :? et la traduction de google laisse a désiré donc si vous avez des notions d'allemand je fais appel a vous.

Citation:
; Software: Die Ansteuerung erfolgt in diesem Beispiel
; wie Memory (memory-mapped). Das hat den Vorteil,
; dass die gleichen Befehle wie für Memory benutzt
; werden können, das Herumeiern mit den verschiedenen
; Ports entfällt und gleichzeitig SRAM am Board be-
; trieben werden kann. (Die Beispiel-Programme auf
; dem Internet-Server sind alle I/O-mapped und ver-
; tragen sich nicht mit gleichzeitigem Memory-Betrieb!).
; Die Adresse der LCD-Steuerung ist $8000 für die
; Befehle und $C000 für den Zugriff auf den Zeichen-
; generator und die Displayzeilen (jeweils Lesen und
; Schreiben.
; Da bei Memory-Betrieb der Zugriff sehr schnell er-
; folgen würde, muss das WAIT-Bit im MCUCR-Register
; gesetzt werden. Das macht zwar den RAM-Zugriff auch
; langsamer, aber das kann verschmerzt werden. Für
; schnelle RAM-Zugriffe kann das Bit zeitweise wieder
; Null gesetzt werden, dann ist der Nachteil weg.

JP est déconnecté   Réponse avec citation
Vieux 29/10/2003, 22h57   Sujet Programme LCD ATMEL - Message #5
sly535
 
Date d'inscription: août 2003
Localisation: PARIS
Âge: 33
Messages: 72
Salut jp, voici l'explication :

apres initialisation du pointeur du pile, tu as :

Ldi mpr, 0xC0
out mcucr, mpr

donc dans un premier temps tu charge la valeur 0xC0 soit tout simplement $C0 ou en encore en binaire 11000000 dans mpr qui est un registre de travail.

ensuite tu le charge dans MCUCR, et la (faut bien regarder le datasheet, car ce registre change un peu de configuration selon la famille) tu valide les bits SRE et SRW de MCUCR.

La doc dit : SRE : Quand ce bit est activé, la ram externe est activée et les fonctions de ports configuré comme tel :

Port A comme entrée/sortie en décodage de donnée et d'adresse LSB(synchro avec ALE)
Port C uniquement en décodage d'adresse MSB (donc en sortie)

sans parler de WR et RD qui deviennent actif, le tout synchroniser pour l'accés à la Sram externe

En fait il s'agit d'une "astuce" très employé dans les systemes à 80C51, ou l'on connecte un afficheur LCD sur le bus du système.
l'afficheur se voit donc adresser comme une mémoire externe.

pour plus de renseignement regarder le datasheet page 9,27, 82....
sly535 est déconnecté   Réponse avec citation
Vieux 29/10/2003, 23h06   Sujet Programme LCD ATMEL - Message #6
sly535
 
Date d'inscription: août 2003
Localisation: PARIS
Âge: 33
Messages: 72
Dommage qu'on ne puisse pas éditer ses anciens message, mais je voulait rajouté cela :

je ne connais pas de configuration "interne" qui déclare un afficheur LCD,

Je prefere indéniablement l'assembleur au C ou Basic, au moins on controle tout de A à Z, et les applications développées sont très performantes

Language de "bas niveau" pour fonctionnement de "haut niveau" lol.

Pour te dire, je connais des personnes dans des sociétés qui sont vraiment embarrassé avec le C dans des applications ou le controle de timing et cruciale, et ou la taille du code générer dans d'autre language ne finissent plus par "rentrer" dans le micro !

Continue en assembleur...
sly535 est déconnecté   Réponse avec citation
Vieux 30/10/2003, 07h36   Sujet Programme LCD ATMEL - Message #7
JP
 
Date d'inscription: février 2003
Localisation: Strasbourg
Âge: 26
Messages: 1 627
Merci sly535,

Je ne pouvais pas rêver mieux


++
JP est déconnecté   Réponse avec citation
Vieux 30/10/2003, 09h18   Sujet Programme LCD ATMEL - Message #8
popo
 
Date d'inscription: janvier 2003
Messages: 50
Bonjour,

Sur le site d'atmel, il y a un guide d'utilisation de programmation atmel en C ou en assembleur, il y a des exemples d'application et les data sheet.
Sur les data sheet on vous explique le partage des ports E/S.
Vous verrez sur les port E/S on peut utiliser beaucoups de fonction comme une sortie PWM ou un CAN.

http://www.atmel.com/products/avr/
Vous avez une liste sur le jeu d'instruction en assembleur
Par exemple
AVR Instruction Set (148 pages, updated 8/02)


A+
popo
popo est déconnecté   Réponse avec citation
Vieux 30/10/2003, 18h44   Sujet Programme LCD ATMEL - Message #9
sly535
 
Date d'inscription: août 2003
Localisation: PARIS
Âge: 33
Messages: 72
merci popo, mais si tu veut en savoir plus, et en francais (enfin j'espere) tu peut toujours passer sur mon site !!!
sly535 est déconnecté   Réponse avec citation
Bienvenue
Si ceci est votre première visite, vous devez vous inscrire avant de pouvoir envoyer des messages. En étant inscrit vous pourrez poster votre question, participer aux débats, joindre vos images... alors n'attendez-plus, cela vous prendra 1 minute !

Pour commencer à lire les messages, depuis la page d'accueil des forums, sélectionnez le forum qui vous tente et partez ensuite à sa découverte...

Publicité

A voir aussi
Aide PIC à programmé pour faire marché un affichage LCD (Forum Électronique)
samples Atmel (Forum Électronique)
LCD HD44780 ---> programme C (Forum Électronique)
Programme pour LCD 44780... (Forum Électronique)
probleme d'UART sur uC Atmel 8515 programme avec IccAvr (Forum Électronique)






A voir aussi (Futura Sciences n'est pas responsable du contenu de ces publicités)
Réponse



Outils
Modes d'affichage

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Les dernières actualités
29/08 14:56 - En bref : Sony présente le téléviseur le plus fin au monde
29/08 09:49 - Le cerveau est bien plus souple qu'on ne le pensait
29/08 09:44 - En bref : encore une plainte contre le LHC, cette fois en Europe
28/08 18:00 - Fermi : un instrument pour percer les plus grands secrets de l'Univers
28/08 15:34 - En bref : Internet Explorer 8 disponible en version bêta
28/08 12:25 - En bref : le Mu 1050 SW, l'appareil photo sur lequel il faut taper
28/08 11:34 - Les futures découvertes avec le LHC : L'avis des prix Nobel

Fuseau horaire GMT +2. Il est actuellement 10h32.

Propulsé par vBulletin
Copyright © 2000 - 2008, Jelsoft Enterprises Ltd. Tous droits réservés.
Traduction par l'association vBulletin francophone