3 votes

Interfaçage Gsm avec atmega16

Je travaille sur l'interfaçage de GSM sim900D avec Atmega16. Initialement, j'ai fait le circuit en utilisant MAX232 sur une planche à pain. Puis je l'ai connecté à mon PC en utilisant un port série. J'ai testé les commandes AT, les commandes ont fonctionné parfaitement sur l'hyper terminal et j'ai été capable d'envoyer des SMS en utilisant l'hyper terminal. Puis je l'ai testé sur Proteus et il fonctionnait parfaitement là aussi.

J'utilise le codevision avr comme compilateur. Le GSM fonctionne à 9600 bauds mais le problème est que dans le compilateur, je dois garder le taux de bauds à 4800 (horloge = 1MHz) et dans le COMPIM de Proteus (bauds physiques = 9600 et bauds virtuels = 4800) alors seulement cela fonctionne quand je l'exécute sur le matériel (breadboard), cela ne fonctionne pas car j'ai réglé le baud à 4800. Je ne sais pas comment régler la baud pour le matériel. J'ai essayé 9600 bauds pour le matériel dans le compilateur mais il n'envoie pas de SMS du tout. Merci de me dire ce que je dois faire ?

0voto

angelatlarge Points 2611

Sur ATmega16 (et d'autres ATmegas), la vitesse de transmission série est définie via UBRRH y UBRRL plus les registres U2X dans le UCSRA registre. La description détaillée de ce fonctionnement commence à la page 146 de l'ouvrage Fiche technique ATmega16 . Fondamentalement, UBRR est un registre de 16 bits et doit donc être accédé séparément par des parties de 8 bits. UBRRH (l'octet de poids fort) et UBRRL (l'octet de poids faible). La valeur que vous voulez mettre dans ces registres (et dans le registre U2X dans UCSRA ) dépend de

  • la fréquence d'horloge
  • le débit en bauds souhaité.

Pour une horloge de 1Mhz et un débit de 9600 bauds, il y a deux options (voir le tableau 68 à la page 168 de la fiche technique) : effacé U2X et UBRR réglé sur 6 ou réglé U2X y UBRR fixé à 12. Cette dernière option permet de générer une vitesse de transmission plus proche de la vitesse de transmission souhaitée (erreur de 0,2 %), c'est pourquoi cette dernière option est recommandée. Par conséquent, le code que vous voulez est :

UBRRH = 0;
UBRRL = 12;
UCSRA |= 1<<(U2X);

Il y a une mauvaise surprise qui se cache ici : comme le dit la fiche technique, UBRRH y UCSRC sont le même registre. UCSRC contrôle la parité, les bits d'arrêt et d'autres paramètres importants. Par conséquent, si vous avez besoin d'écrire sur UCSRC assurez-vous que vous définissez l'option URSEL en même temps :

UCSRC = (1<<URSEL) | (...other bits...)

ou

UCSRC |= (1<<URSEL) | (...other bits...)

Sinon, vous allez assommer votre UBRRH et vous vous demandez pourquoi votre vitesse de transmission n'est pas celle que vous attendiez.

Mais vous pouvez également utiliser le code de la librairie AVR Libc, qui fournit un moyen simple de régler la vitesse de transmission sur l'AVR, cf. util/setbaud.html

0voto

Prashant Points 121

Si vous vérifiez la fiche technique, le taux d'erreur est trop élevé. Si vous utilisez une vitesse de 9600 bauds sur 1MHZ, c'est le problème principal. Prenez 8,12,16 MHZ comme possible et vérifiez la fiche technique. et n'oubliez pas de graver les bits de fusible liés à la fréquence XTAL si vous ne gravez pas ces bits correctement qui sont liés au cristal qui ne fonctionne pas correctement.

si vous avez besoin de plus d'aide, demandez

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X