2010-04-03 3 views
0

J'ai un microcontrôleur PIC18F4455 que j'essaie d'utiliser pour envoyer 200 valeurs par USB. Fondamentalement, j'utilise une boucle for et une instruction printf pour imprimer les valeurs au flux de sortie usb. Cependant, quand le code s'exécute, je vois dans mon moniteur de port série qu'il envoie seulement les 25 premières valeurs, puis s'arrête. Mon code PIC C est ci-dessous. Il enverra la 25ème valeur (et la virgule), mais n'enverra rien après et n'enverra pas de caractère de retour à la ligne. J'essaye de l'envoyer pour envoyer toutes les valeurs, puis un caractère de nouvelle ligne à la fin. Je les envoie tous en tant que caractères car je peux les convertir sur le PC.PIC C - Envoi de 200 valeurs par USB, mais j'en envoie seulement 25 environ

//print #3 
    for (i = 0; i <= 199; i++){if (data[i]=='\0' || data[i]=='\n'){data[i]++;}} 
    for (i = 0; i < 199; i++){printf(usb_cdc_putc, "%c,", data[i]);} 
    printf(usb_cdc_putc, "%c\n", data[199]); 
+0

qu'est-ce que _usb_cdc_putc_? –

Répondre

0

Je l'ai compris. J'ai fini par avoir besoin de mettre un délai après l'impression dans le flux. Un delay_us (20) dans la boucle for après que l'instruction print a effacé les choses.

+0

Un peu en retard, mais il semble que vous ayez besoin d'un protocole XOn/XOff ou que vous deviez vérifier le RTS/CTS avant d'ajouter des données au flux. – cup

2

Vous risquez de surcharger le tampon (FIFO dans le matériel) s'il est trop court. C'est pourquoi le délai a résolu le problème - parce que vous avez donné au matériel le temps d'envoyer des octets avant d'en ajouter de nouveaux dans le FIFO.

Lire la fiche technique du contrôleur pour voir la taille de ce FIFO. Il y a probablement un moyen de vérifier si elle est pleine et donc d'attendre moins de 20 usec.

En outre, j'utiliserais putchar pour imprimer des caractères uniques, pas printf.

Questions connexes