Bonjour,
J'ai un atmega1284P et un crystal externe de 20Mhz.
Quels sont les valeurs des fusibles Low, High et extended à positionner pour 20Mhz ?
Je précise j'utilise Atmel Studio, sinon je n'aurai pas posé la question avec Arduino.
Il existe un simulateur pour les fusibles, mais je ne sais pas l'utiliser, il n'y a pas 20 Mhz, il y a seulement 8Mhz, et il y a plusieurs options pour cette valeur en external.
Merci.
Est ce que ceci fonctionne pour 19200 bauds 8data 1stop bit no parity avec un crystal de 20Mhz ?
#define F_CPU 10000000UL
//#define CYCLES_PER_US ((F_CPU+500000)/1000000)
#include <avr/io.h>
#include <util/delay.h>
#define BAUDRATE 19200
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 20UL))) - 1)
void USART_init(unsigned char ubrr){
/*Set baud rate */
UBRR1H = (unsigned char)(ubrr>>8);
UBRR1L = (unsigned char)ubrr;
_delay_ms(1);
//Enable receiver and transmitter
UCSR1B = (1<<RXEN1)|(1<<TXEN1);
/* Set frame format: 8data, 1stop bit no parity*/
UCSR1C = 0 | (0<<USBS0) | (1<<UCSZ11) | (1<<UCSZ10);
_delay_ms(1);
}
J'utilise le port usart1 et non le usart0.
J'ai décoché clockdiv8 dans les fuses et mis ext Osc 8Mhz
Dans le fichier board.txt du package MightyCore pour une configuration ATmega1284P @ 20MHz les valeurs des fusibles sont les suivantes:
- low fuse: 0xF7
- high fuse: 0xD7
- extended fuse: 0xFF
Ce qui dans AVRⓇ fuse calculator correspond à
Ces valeurs fonctionne parfaitement pour une carte que j'ai faite avec un ATmega1284P @16MHz.
Dans le calculateur de fusibles, il vaut mieux partir avec "Full Swing Oscillator". C'est une option qui configure l'oscillateur avec une plus grande dynamique et il est moins chatouilleux. Si tu veux réduire la consommation tu peux choisir l'option "Ext. Crystal Oscillator" mais celui-ci pourrait mal fonctionner si le système est instalé dans un environnement perturbé et la mise au point peut-être un peu plus délicate.
Il faut que tu regardes le tableau dans la data du micro pour les valeurs de CKSEL en fonction de ce que tu veux. Par défaut il est sur osc interne à 8MHz. Le programme pour les fuses est AVRDude, il en existe un autre avec la sonde AVRISP mais je ne souviens pas du nom de ce programme. Je pense qu'il s'appelle AVRISP mais je ne suis pas sûr
Merci pour vos informations et les explications.
Quand j'écris les valeurs des fuses avec atmel studio, quand je ferme la boite de dialogue et que je la réouvre device programming dans fuses, ca revient toujours à cette valeur.
Est ce que cette formule est bonne pour un crystal de 20 Mhz ?
#define F_CPU 20000000UL
//#define CYCLES_PER_US ((F_CPU+500000)/1000000)
#include <avr/io.h>
#include <util/delay.h>
#define BAUDRATE 115200
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 20UL))) - 1)
la valeur ne change pas en fait c'est parce que j'utilise un dongle usbasp qui n'est pas reconnu comme l'AVR ISP MKII, il est en mode simulation.
En fait ma question c'est comment utiliser USART1 avec un atmega1284P et atmel studio, avec F_CPU et BAUDRATE.
Les fusibles sont bien positionnés, mais lors de l'envoi de caractères j'ai des hiéroglyphes.
USART_Init() (115200 8 N 1 )
void USART_init(unsigned char ubrr){
/*Set baud rate */
UBRR1H = (unsigned char)(ubrr>>8);
UBRR1L = (unsigned char)ubrr;
_delay_ms(1);
UCSR1C = 0 | (1<<UCSZ12) | (1<<UCSZ11) | (1<<UCSZ10);
//Enable receiver and transmitter
UCSR1B = (1<<RXEN1)|(1<<TXEN1);
_delay_ms(1);
/* Set frame format: 8data, 1stop bit no parity*/
//UCSR1C = 0 | (0<<USBS0) | /*(1<<UCSZ11) |*/ (3<<UCSZ10);
//_delay_ms(1);
}
(Sur arduino ca fonctionne bien en utilisant Serial, booloader a 20Mhz)
J'ai essayé aussi avec un crystal de 16 Mhz ca ne fonctinne pas aussi.
Cette ligne est fausse le 20UL devrait être soit 16, soit 8 suivant le mode choisi.
- 16 pour le mode normal (c'est la valeur couramment utilisée)
- 8 pour le mode vitesse double
Tout est clairement expliqué dans la datasheet de l'ATmega1284
Tu as trois sondes courantes avr L'avrisp qui ressemble à la sonde usbasp que tu as, la mkII qui permet de faire du débug et la One qui permet le debug à grande vitesse.
Dans l'image que tu montres à partir du moment que JTAG est EN tu peux configurer les fuses. Par contre je n'ai aucune idée comment ca se passe avec AVRStudio quand il ne reconnait pas la sonde. Tu peux toujours voir avec le forum avrfreaks, ça serait bien étonnant qu'il n'y ait pas de réponse.
Edit: J'ai bien compris ton micro reste bloqué en 8MHz?
Tu peux programmer les fusibles avec avrdude.
C’est parce que j’ai un Crystal de 20mhz je pensais qu’il fallait mettre 20, c’est au niveau de f_cpu qu’il faut mettre 20000000ul
J’ai un avr isp Mk II du coup je peut mettre les fuses.
Pas de problème. Je me suis mal expliqué, cette sonde on l'appelais avrisp, celle qu'on appelais MK2 c'était la Ice. Il doit être possible de retrouver cette petite appli sur le site de Microchip sinon ce doit être possible dans avrStudio. L'utilisation de cette sonde permettait la configuration des fuses et le flashage programme sans installation de avrstudio.
De mémoire c'était utilisé dans les micros sans boot, tu souhaites faire de la programmation sans boot?
Oui je n'ai pas besoin de boot, le boot est utilisé avec arduino, mais pas dans ce cas avec avr studio, je veux juste envoyer des caractères via le port série USART1.
Je possède déjà AVR ISP MK II, l'original de chez atmel et j'utilise avr studio pour positionné les fuses.
Merci pour les liens, mais mon problème n'est plus les fusibles, je l'ai réglé avec l'AVR ISP MKII, mon problème est comment initialiser USART1, avec F_CPU et la formule, dans le datasheet les exemples ne fonctionne pas pas il utilise 8dat et 2 stop bit, dans mon cas c'est 8data 1stop bit no parity, dans l'exemple que j'ai mis ici ca devrait fonctionner, mais ca ne marche pas.
Comment faire pour utiliser USART1 ?
il me faudrait un exemple, j'ai décortiqué tout internet et je n'ai trouvé aucune configuration avec 115200, 8data et 1 bit de stop. avec un crystal de 20Mhz.
Dans ton exemple tu utilise un crystal de 16Mhz, moi j'ai un 20Mhz, est ce que la position de ces fusibles fonctionneront ?
Maintenant tout fonctionne le problème vient de Uterm-s, qui doit être assez sensible au niveau du calcul des bauds avec avr studio, car sa fonctionne très bien sous arduino, en connectant le port série de l'Atmega1284P (DIP-40 board from tindie) et au terminal teraterm de windows, ca fonctionne bien, jusque 57600, au delà ca génère des caractères ascii.
Donc, pourquoi ca fonctionne bien sous arduino en 115200 et non a partir de AVR STUDIO.