[RESOLU] Compréhension code VPORTx

Bonsoir, Pour piloter un écran LCD 128x64 sans passer par une librairie spécifique (du genre glcd qui fonctionne très bien), j'ai trouvé un code qui paraît correspondre à mes besoins en terme de vitesse. La mise en oeuvre dans l'environnement Arduino pose problème, je tombe sur des définitions qui ne sont pas reconnues :

#define LCD_CTRL VPORT0.OUT
#define LCD_SIDE VPORT1.OUT
#define LCD_DATA_OUT VPORT3.OUT
#define LCD_DATA_IN VPORT3.IN
#define LCD_DDR VPORT3.DIR

J'ai compris que cela correspondait à des ports virtuels permettant justement d'améliorer la vitesse. Comment convertir ces directives pour qu'elles fonctionnent dans l'environnement Arduino ? Merci pour votre aide @+

La librairie en question doit avoir des include au début.. Il faut les retrouver pour savoir à quoi correspondent les VPORT.

Bonsoir,

fdufnews:
La librairie en question doit avoir des include au début… Il faut les retrouver pour savoir à quoi correspondent les VPORT.

A part stdint.h, il n’y a rien d’autre.
Je mets les fichiers en pièce jointe
@+

sbn0064g.zip (7.43 KB)

bonjour, il manque pas des fichiers?

#include "sbn0064g.h"
#include "mygccdef.h"

sinon ca ressemble à des "adressages", sur des ports virtuels comme tu le dis. trouvé ca dans un prog, si ca peut aider

      VPORT0.OUT |= 0x04;  // PH2=1 (RD=1)
      VPORT0.OUT |= 0x08;  // PH3=1 (RS=1)
      VPORT0.OUT &= 0xfb;  // PH2=0 (RD=0)
      VPORT0.OUT &= 0xf7;  // PH3=0 (RS=0)

      VPORT1.OUT |= 0x01;  // PA0=1 (CS=1)
      VPORT1.OUT &= 0xfe;  // PA0=0 (CS=0)

      VPORT2.OUT |= 0x80;  // PD7=1 (WR=1)
      VPORT2.OUT &= 0x7f;  // PD7=0 (WR=0)

Bonjour Infobarquee, Merci pour ces précisions. Sur le code de référence, je n'ai pas trouvé de fichier où apparaissait une définition des VPORTx. En effet en fouillant un peu, j'ai compris que cela correspondait à DDRx, PORTx et PINx mais je ne vois pas pourquoi cela est plus rapide à moins qu'il y ait un traitement particulier par le compilateur. Pourrais-tu me transmettre (si c'est possible) le code dans lequel il y ait ces définitions ? @+

P.S.: Comment vont les coins ?

http://www.mikrocontroller.net/attachment/94662/virtu.c

pour les coincs, c'est mort pour la 1ere couvée, et pas qu'au sens figuré :(

Re,

infobarquee: http://www.mikrocontroller.net/attachment/94662/virtu.c pour les coincs, c'est mort pour la 1ere couvée, et pas qu'au sens figuré :(

Merci pour le lien. C'est triste pour moi qui aime les animaux. Connais-tu la cause ?

le temps encore trop frais, donc ce we, remise en place de l'éleveuse dans le relais de chasse avec lampes etc...

Bonjour, Après de longues recherches et beaucoup de lecture, il semble que le sujet est sur le point d'être abandonné car je ne peu pas l'utiliser dans l'état avec les ATmegaxxxx. En effet, la possibilité d'exploiter les ports virtuels sur les I/O restent réservés au Xmega. Pour résumer : Les instructions d'entrées / sorties des AVR ne sont opérationnelles avec des adresses qui sont dans la zone mémoire AVR I/O. Pour accélérer la vitesse d'exécution, on peut utiliser des ports virtuels. On peut créer jusqu'à 4 ports virtuels. Chaque port virtuel dispose d'un registre DIR, OUT, IN et INTFLAGS. Les noms des ports virtuels sont VPORT0, VPORT1, VPORT2 et VPORT3. Il existe 2 registres VPCTRLA et VPCTRLB qui contiennent l'affectation des ports virtuels. Ces deux registres appartiennent au module de PORTCFG. Chaque port correspond à un numéro 0 pour PORTA, 1 pour PORTB, ....., 15 pour PORTR. [u]Exemple:[/u] Port C vers port virtuel 0 et port D vers port virtuel 1, le port virtuel 0 en entrées et port virtuel 1 en sorties. Puis lecture VPORT0 et sortie sur VPORT1.

PORTCFG.VPCTRLA = 0x32;  // PORTC -> VPORT0 et PORTD -> VPORT1
VPORT0.DIR = 0x00;  // VORT0 en entrées
VPORT1.DIR = 0xFF;  // VPORT1 en sorties
VPORT1.OUT = VPORT0.IN;  // lecture VPORT0 et sortie sur VPORT1

Il reste évidemment beaucoup de mystères autour de ces ports virtuels. Par contre je reste ouvert à tout complément d'informations sur le sujet. Sujet RESOLU par ABANDON mais pas par KO