DSPIY 2560 - Proto 1

Discutions générales sur le DSPiy et tout ce qui s'y rattache
Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: DSPIY 2560 - Proto 1

Messagepar alka » mer. 13 janv. 2016 21:04

thierryvalk a écrit :C'est bien le goto, mais faut pas en abuser.
Les informaticiens n’aiment pas car tu pourrais faire boucler sans fin.
Par contre while(1); ne dérange personne. :0

En assembleur on utilise jump à toute les sauces, et le compilateur va transformer pas mal de code en jump qui est en fait un goto. :0


while(1) il a des crochets derriere et on sait ce qui va etre répété.
un goto c'est un saut incontrolé dans l'inconnu, non vérifié par le compilateur. Ca fait du code peu réutilisable et difficile a maintenir.
acheter un DSPiy ? c'est ici

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » ven. 22 janv. 2016 18:19

Bon, encore un gros changement ::d
Suite aux tests de Thierry sur le convertisseur AC/DC http://www.vigortronix.com/5WattACDCPCBPowerModule.aspx, j'ai décidé de viré les LT8301, pour les remplacer par ces modules. Ils ont l'avantages d'avoir le 230Vac en entrée et pas 24VDc comme les LT8301, et surtout ça fait une source de problème en moins car ils sont tout intégrés.
Je ne les pas intégrés tout simplement car je vais surement avoir à faire beaucoup de chose sur cette carte (mesures, modif etc) et je ne veux pas faire ça en présence du 230V. On verra après comment je les intégrerais dans le système final.
Voila ce que ça donne :

Image

La carte fait 15x8cm. C'est pas encore fini, mais je pense ne plus avoir à faire de grosse modification :]

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » sam. 23 janv. 2016 19:24

Petite avancée du samedi :
J'ai renommé correctement les composants et les connecteurs, optimisé la sérigraphie, et placement des vias. Je sais pas si j'ai abusé ou pas sur les vias, qu'est-ce que vous en pensez ?
Thierry, les vias que tu mets sous les chips, c'est pour la dissipation thermique ? Tu penses qu'il y en a besoin ici ? Par exemple sous les régulateurs ?

Image

Image

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: DSPIY 2560 - Proto 1

Messagepar alka » sam. 23 janv. 2016 19:46

je sais pas dire si c'est abusé en quantité mais pourquoi avoir concentré les vias en rafale au bord des zones près des pistes ou coonnecteurs ?
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: DSPIY 2560 - Proto 1

Messagepar alka » sam. 23 janv. 2016 19:51

c'est marrant :
sw1 ... led1
sw2 ... led2

...

sw8 ... led12


un saut quantique ?
acheter un DSPiy ? c'est ici

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » sam. 23 janv. 2016 19:58

alka a écrit :je sais pas dire si c'est abusé en quantité mais pourquoi avoir concentré les vias en rafale au bord des zones près des pistes ou coonnecteurs ?


J'ai vu ça sur les pcb RF. Bon on est à des fréquences bien moindre (à par pour l'antenne) mais tout de même ~3MHz pour l'I2S il me semble. Alors est-ce que c'est bien utile.. je n'en sais rien ! D'ailleurs je viens de remarquer qu'il faut que je revois le routage au niveau de l'antenne. Il faut que j'écarte plus les via de l'antenne. Ca se calcul :langue:
Image

alka a écrit :c'est marrant :
sw1 ... led1
sw2 ... led2

...

sw8 ... led12


un saut quantique ?


Bien vu, mais c'est simplement une superposition d'état ;)
je vais modifier ça, merci

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: DSPIY 2560 - Proto 1

Messagepar alka » sam. 23 janv. 2016 20:09

;)

sur ton exemple, il y a des vias un peu partout, pas juste au bord. C'est thierry le pro, il va te dire. Moi il me dit toujours d'en mettre plus, un peu partout et pas alignés :)
acheter un DSPiy ? c'est ici

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » sam. 23 janv. 2016 20:24

C'était un mauvais exemple :]
Mais oui on verra ce que Thierry en pense

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: DSPIY 2560 - Proto 1

Messagepar thierryvalk » sam. 23 janv. 2016 22:59

Pour une fois que je dis rien ::d
Louis a raison, on n'est pas HF comme pour le Bluetooth, mais tout de même c'est pas si mal et lorsque je vois d'autres réalisation, j'en met très peu.
Il fut une époque lointaine où l'on payait au nombre de trous métallisés, d'un autre coté c'était de gros trous.

Je trouve l'empreinte des optos fort finotte, c'est peut être juste la copie d'écran.

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » lun. 9 janv. 2017 11:49

Hello !
Cette année commence bien pour moi ::d
J'ai reçu tous les composants pour le proto, sauf le bluetooth que je reçois demain (normalement) et l'écran que j'ai pas encore commandé. J'ai aussi reçu la carte NXP OM13058 qui contient le µC LPC11U68. Je devrai monter ça en fin de semaine ou la semaine prochaine.
La carte en elle même ne permet pas grand chose mais permet de tester un peu tout ce que je vais utiliser. J'ai pas mal réfléchi à ce que je voulais.
D'abord je vais commencer par tester tout ce qu'il y a sur la carte. WM8805 et bluetooth ça devrait pas être bien méchant. L'écran peut-être un peu plus. Le plus compliqué va être de me familiariser avec le LPC.. :cote:
Ensuite j'ai pas mal réfléchi à ce que je voulais autour. A la base, j'étais parti pour 3 dspiy. Mais en réfléchissant, je ne pense pas faire de filtrage actif pour mes enceintes surround&central, et j'utiliserai juste l'entrée analogique. Je pense qu'une petite carte avec un ADAU1701 et un ESS9023 serait plus intelligent. Bien sur c'est plus compliqué niveau soft :ghee:
Pour les frontales, je pense garder un dspiy, bien que c'est encore à étudier.
J'avais prévu également un petit serveur pour pouvoir contrôler/configurer tout ça à distance. En y réfléchissant, je pense qu'une solution avec un RPI 0 peu être pas mal, car permettrait d'intégrer un lecteur réseau (style Volumio), et facilite l'intégration d'un server. La communication entre le LPC et le RPI se ferait par UART. On pourrait par exemple afficher les informations sur le fichier joué sur l'écran via cette liaison. Le RPI permettrait également de stocker les fichiers de configuration. Bref je pense que c'est une solution pas mal, mais y'a du boulot !
Et pour l'instant, il faut vérifier que la carte fonctionne ::d
Louis

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » mar. 10 janv. 2017 18:28

Bon je viens de passer quelques heures sur LPCXpresso et avec le LPC11U68, c'est pas évident ::d
Faut un peu fouiller partout pour trouver de la doc, c'est assez surprenant ! Et je n'ai absolument rien trouvé sur la carte de dev, à part son schéma 8|

Je cherche à écrire une fonction "delay", qui utiliserai le timer Systick pour incrémenter un compteur toutes les milliseconde (par exemple). Mais pour ça, j'ai besoin de trouver la fréquence d'horloge du système, qui est stockée dans la variable "SystemCoreClock". Mais je trouve pas ou cette variable est initialisée.

Bon c'est plein de petits trucs comme ça, mais je pense que j'ai pas l'habitude de programmer "proche du hardware".. mais je vais m'accrocher ::d

Mis à part ça, LPCXpresso ça a l'air vraiment sympa et bien foutu.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: DSPIY 2560 - Proto 1

Messagepar thierryvalk » mar. 10 janv. 2017 18:57

Oui, il faut un peu s'habituer et je te rassure, je tourne aussi souvent en rond.

La cause principale est que justement, on n'est plus aussi proche du hardware qu'avant.
Je présume que tu utilise LPCOpen ?
Une horreur en taille de code car justement, il va te permettre de ne plus t'occuper de calculs manuels.

Si tu regardes dans les exemples fournis avec LPCOpen tu y verras comment régler le timer Systick :
SysTick_Config(Chip_Clock_GetSysTickClockRate() / TICKRATE_HZ);
Avec TICKRATE ta fréquence tout simplement.
Et ta fonction void SysTick_Handler(void) serra appelée à cette fréquence.
Il n'y a rien d'autre à faire. Quoi que pas toujours intuitif, la gestion de la puissance avec souvent la nécessité de mettre en On ce que tu va utiliser.

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » mar. 10 janv. 2017 19:11

Oui j'utilise LPCOpen pour l'instant. Mais effectivement, tu en avais déjà parlé, c'est assez lourd. Mon idée ça serait de me faire la main en utilisant LPCOpen et au fur et à mesure écrire mes propres lib :)

Merci pour le SysTick, ça marche nickel :super:

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » mar. 10 janv. 2017 19:57

Bon j'ai trouvé ma fréquence, même si ça ne me sert pas du coup ::d
SystemCoreClock = 48Mhz.

Je l'ai envoyée sur le port série du PC :gene:

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » jeu. 12 janv. 2017 14:53

Carte soudée, et ça a l'air fonctionnel. Toutes les tensions sont OK, j'ai vérifié les faux-contacts/mauvaises soudures, ça a l'air OK aussi. Première boulette : j'ai pas relié le Vcc du bluetooth au 3V3 :gene:
Le bluetooth semble marcher, j'arrive à me connecter via un téléphone, et je récupère ses infos sur mon PC via l'interface UART. La prochaine étape c'est de tester le WM8805 et le configurer. Ensuite je veux le configurer pour envoyer le SPIDF du bluetooth vers la sortie SPIDF du WM8805 pour vraiment tester si ça marche.
L'étape d'après sera la communication entre le LPC et le bluetooth via l'UART .. :cote:
Louis

IMG_20170112_154521_1.jpg

louisr
Messages : 456
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: DSPIY 2560 - Proto 1

Messagepar louisr » jeu. 12 janv. 2017 19:45

Je me suis attaqué à l'I2C du LPC. Déjà, je connais le principe et le protocole, mais ça s'arrête la ::d
Je me sers donc des libs de LPC, et je suis parti d'un exemple fourni avec les libs. Ça n'a pas l'air très compliqué avec la librairie, mais l'exemple fait beaucoup de chose, donc pas simple de s'y retrouver :gene:

Voila en gros ce que j'ai compris :
On a une structure I2C_XFER_T qui contient : l'adresse à laquelle on veut transmettre, l'adresse du tableau ou sont stockés les données à transmettre, ainsi que le nombre d'octets à transmettre. De même pour la lecture : un pointeur sur le tableau on l'on va stocker les données reçue, ainsi que le nombre attendu d'octet.

Ensuite, il y a deux modes : polling ou interrupt. Le polling consiste a regardé régulièrement ce qu'il se passe sur l'I2C, alors que l'interrupt interrompt l'µC dès qu'il se passe quelque chose sur l'I2C. J'aurai tendance à croire que ça concerne l'µC lorsque l'on est en slave, mais apparemment non. Et je ne sais pas trop quelle est la méthode la plus intéressante, sachant que je n'ai rien de bien rapide/critique sur le bus..

A priori, l'exemple que j'ai repris utilise le mode interrupt, car on utilise cette fonction :

Code : Tout sélectionner

void I2C0_IRQHandler(void)
{
   i2c_state_handling(I2C0);
}


qui appelle :

Code : Tout sélectionner

static void i2c_state_handling(I2C_ID_T id)
{
   if (Chip_I2C_IsMasterActive(id)) {
      Chip_I2C_MasterStateHandler(id);
   }
   else {
      Chip_I2C_SlaveStateHandler(id);
   }
}


Cette fonction regarde si un transfert est en cours. Si oui, elle modifie l'enum "I2C_STATUS_T". Sinon elle modifie " I2C_EVENT_T".

Ensuite l'initialisation :

Code : Tout sélectionner

static void i2c_app_init(I2C_ID_T id, int speed, int slave_address,I2C_XFER_T *xfer)
{
   Init_I2C_PinMux();
   address_device &= 0xFF;
    xfer->slaveAddr = address_device;
   xfer->rxBuff = 0;
   xfer->txBuff = 0;
   xfer->txSz = 0;
   xfer->rxSz = 0;
   

   /* Initialize I2C */
   Chip_I2C_Init(id);
   Chip_I2C_SetClockRate(id, speed);

   /* Set default mode to interrupt */
   i2c_set_mode(id, 0);
}


J'ai repris l'exemple, en y rajoutant l'ajoutant l'initialisation de I2C_XFER_T, bien qu'en y repensant c'est pas pratique lorsqu'il y a plusieurs adresses différentes sur le BUS. La fonction "Init_I2C_PinMux();" est appelée, je ne comprend pas trop à quoi elle sert ..

Code : Tout sélectionner

static void Init_I2C_PinMux(void)
{
   Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 4,
      (IOCON_FUNC1 | I2C_FASTPLUS_BIT) | IOCON_DIGMODE_EN);
   Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 5,
      (IOCON_FUNC1 | I2C_FASTPLUS_BIT) | IOCON_DIGMODE_EN);
}


Bon tout ça pour dire que j'ai écrit une fonction très simple pour lire dans un registre :

Code : Tout sélectionner

static int i2c_read_reg(I2C_XFER_T *xfer, int address_reg) {
   int tmp, i;
   buffer[0]=address_reg;
   xfer->txSz=xfer->rxSz=1;
   xfer->txBuff = buffer [0];
   xfer->rxBuff = buffer [1];
   Chip_I2C_MasterTransfer(i2cDev, &xfer);
   return (buffer[1]);
}


La fonction est très simple, et ne gère absolument pas les erreurs, mais c'est pour le principe. ça devrait marcher, non ? ::d

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: DSPIY 2560 - Proto 1

Messagepar thierryvalk » jeu. 12 janv. 2017 20:20

L'I2C chez NXP a toujours été simple, avec LPCOpen ils ont tout compliqué.
Je ne l'ai jamais utilisé, le firmware du DSPiy n'est pas sous LPCOpen qui n'existait pas encore et pour d'autres applications j'ai réécrit mes routines pour gagner en taille de code.

La fonction Pin-Mux n'est a appeler qu'a l'initialisation, c'est juste pour "raccorder" les Pins physique du µC au module I2C.

Interrupt ou polling, dépend de ce que l'on veut faire.
Le polling va en général être bloquant. Tu écris sur l'I2C, attend la fin puis y réécrit autre chose ou y lit ou continue ton programme.
En interrupt, tu écris puis laisse faire en tâche de fond. On y gagne en temps selon l'usage, mais pas pratique si l'on veut garder un certain synchronisme avec d'autres fonctions.

La gestion des erreurs n'est pas toujours nécessaire.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: DSPIY 2560 - Proto 1

Messagepar thierryvalk » ven. 13 janv. 2017 08:39

Voici un bout de code relativement simpliste qui utilise les fonctions en ROM d'un LPC812 pour la lecture d'un capteur de température.

Code : Tout sélectionner


SendData
[0] = (uint8_t)adtemp;//adresse I2C
    SendData[1] = (uint8_t) 0x2;

    recvData[0] = (uint8_t)adtemp;//adresse I2C
    recvData[1] =0;

    param.num_bytes_send    = 2;
    param.buffer_ptr_send   = &SendData[0];
    param.num_bytes_rec     = 3;
    param.buffer_ptr_rec    = &recvData[0];
    param.stop_flag         = 1;

    LPC_I2CD_API->i2c_set_timeout(i2cHandleMaster, 100000);

    /* Do master write transfer */
    error_code = LPC_I2CD_API->i2c_master_transmit_poll(i2cHandleMaster, &param, &result);
    if ((error_code != LPC_OK)&&(error_code !=ERR_I2C_NAK))
            {ctaerror=ctaerror|0x1;}
    /* Do master read transfer */
    error_code = LPC_I2CD_API->i2c_master_receive_poll(i2cHandleMaster, &param, &result);
    if ((error_code != LPC_OK)&&(error_code !=ERR_I2C_NAK))
            {ctaerror=ctaerror|0x1;}
 


et la fonction Init qui va avec. Attention, c'est pour un LPC812, pas certain que les Pins soient les mêmes.

Code : Tout sélectionner


void init_I2C
()
{

    /* Enable the clock to the Switch Matrix */
        Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);

        /* Connect the I2C_SDA and I2C_SCL signals to port pins(P0.10, P0.11) */
        Chip_SWM_MovablePinAssign(SWM_I2C_SDA_IO, 11);
        Chip_SWM_MovablePinAssign(SWM_I2C_SCL_IO, 10);

        /* Disable the clock to the Switch Matrix to save power */
            Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

            /* Enable I2C clock and reset I2C peripheral */
                Chip_I2C_Init(LPC_I2C);

                /* Setup clock rate for I2C */
                Chip_I2C_SetClockDiv(LPC_I2C, I2C_CLK_DIVIDER);

                LPC_I2C->MSTTIME = (2<<4)|(2);//(((sclH - 2) & 0x07) << 4) | ((sclL - 2) & 0x07);   18

                /* Enable Master Mode */
                Chip_I2CM_Enable(LPC_I2C);


                /* Perform a sanity check on the storage allocation */
                    if (LPC_I2CD_API->i2c_get_mem_size() > sizeof(i2cMasterHandleMEM)) {
                        /* Example only: this should never happen and probably isn't needed for
                           most I2C code. */
                        errorI2C();
                    }

                    /* Setup the I2C handle */
                    i2cHandleMaster = LPC_I2CD_API->i2c_setup(LPC_I2C_BASE, i2cMasterHandleMEM);
                    if (i2cHandleMaster == NULL) {
                        errorI2C();
                    }
}
 


Retourner vers « DSPiy général »

Qui est en ligne

Utilisateurs parcourant ce forum : Majestic-12 [Bot] et 8 invités