Kurzreferenz zum Test und Betrieb des Seriell-ISP
(EN google-translate)
(PL google-translate)
Verwendeter Quarz: 9,216MHz
| Beschreibung | Befehl |
|---|---|
| Kompilieren zu .elf-Datei | avr-gcc -O2 -mmcu=atmega32 rs232_senden.c -o rs232_senden.elf |
| Umwandeln nach .hex-Datei | avr-objcopy -O ihex -j .text -j .data rs232_senden.elf rs232_senden.hex |
| Flashen | avrdude -c ponyser -p m32 -P /dev/ttyS0 -U flash:w:./rs232_senden.hex:a |
| Auslesen | avrdude -c ponyser -p m32 -P /dev/ttyS0 -v |
| Empfangene Daten sehen | gtkterm --bits 8 --speed 115200 --port /dev/ttyS0 --echo |
| Fuses auslesen und in Datei speichern | avrdude -c ponyser -p m32 -P /dev/ttyS0 -U lfuse:r:./lfuse.txt:r -U hfuse:r:./hfuse.txt:r |
Tabelle 0-1: Kurzreferenz zum Test und Betrieb des Seriell-ISP.
Fuses Beispiele für ATmega32 (JTag deaktiviert)
| Beschreibung | Befehl |
|---|---|
| Für alle Hfuse: | avrdude -c ponyser -p m32 -P /dev/ttyS0 -U hfuse:w:0xC9:m -u |
| interner RC Osc. 1MHz Lfuse: | avrdude -c ponyser -p m32 -P /dev/ttyS0 -U lfuse:w:0xE1:m -u |
| High Frequency Crystal Osc. Lfuse: | avrdude -c ponyser -p m32 -P /dev/ttyS0 -U lfuse:w:0xFF:m -u |
| Medium Frequency Crystal Osc. Lfuse: | avrdude -c ponyser -p m32 -P /dev/ttyS0 -U lfuse:w:0xFD:m -u |
Tabelle 0-2: Standardwerte für Fuse-Register.
#include<stdio.h>
int main()
{
int ch;
int ch2;
FILE* data = fopen("./hfuse.txt","rb");
FILE* data2 = fopen("./lfuse.txt","rb");
ch = fgetc( data );
ch2 = fgetc( data2 );
printf("\nHFUSE=%i (dezimal)\n",ch);
printf("HFUSE=%x (haxadezimal)\n",ch);
printf("\nLFUSE=%i (dezimal)\n",ch2);
printf("LFUSE=%x (haxadezimal)\n",ch2);
fclose(data);
fclose(data2);
}
Code 0-1: C-Programm, um in hfuse.txt und lfuse.txt gespeicherten Werte der Fuse-Register in der Konsole anzuzeigen (Kompilieren mit g++ -o liesfuses liesfuses.c).
#include<avr/io.h>
//Definition von Taktfrequenz und Bausrate als Konstanten
#define TAKTFREQUENZ 9216000
#define BAUDRATE 115200
int main()
{
long pause;
//Aktivieren der RS232-Schnittstelle des Mikrocontrollers:
//Merken des in UBRR zu speichernden Wertes.
unsigned int baudregister = TAKTFREQUENZ/8/BAUDRATE-1;
//setzen der Baudrate
UBRRH = (unsigned char) (baudregister>>8); //Setzen des HIGH-Bytes des Baudraten-Registers
UBRRL = (unsigned char) baudregister; //Setzen des LOW -Bytes des Baudraten-Registers
//Einschalten des Senders und des Empfängers
UCSRB = (1<<TXEN) | (1<<RXEN);
//Setzen des Nachrichtenformats: 8 Datenbits, 1 Stopbits
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
UCSRA = (1<<U2X);
//Es soll wiederholt von 0 bis 255 durchgezählt werden und
//der aktuelle Wert im Hyperterminal zu sehen sein.
while(1)
{
while( !(UCSRA & (1<<UDRE)) ); //Warten bis der Uebertragungspuffer leer ist
UDR = 'A'; //Daten in den Puffer schreiben und übertragen
for(pause=0;pause<500000;pause++)
DDRC=0b00000000;
}
}
Code 0-2: rs232_senden.c - Testprogramm, um die serielle Datenübertragung vom Mikrocontroller zum PC zu überprüfen.
#include<avr/io.h>
//Definition von Taktfrequenz und Bausrate als Konstanten
#define TAKTFREQUENZ 9216000
#define BAUDRATE 115200
int main()
{
unsigned char akku=0;
DDRA = 0b00000000;
DDRB = 0b00000000;
DDRD = 0b00000000;
DDRC = 0b11111111; //über RS232 gesendete Zahlen sollen auch an
//zweiten Mikrocontroller geschickt
//und angezeigt werden.
//Aktivieren der RS232-Schnittstelle des Mikrocontrollers:
//Merken des in UBRR zu speichernden Wertes.
unsigned int baudregister = TAKTFREQUENZ/8/BAUDRATE-1;
//setzen der Baudrate
UBRRH = (unsigned char) (baudregister>>8); //Setzen des HIGH-Bytes des Baudraten-Registers
UBRRL = (unsigned char) baudregister; //Setzen des LOW -Bytes des Baudraten-Registers
//Einschalten des Senders und des Empfängers
UCSRB = (1<<TXEN) | (1<<RXEN);
//Setzen des Nachrichtenformats: 8 Datenbits, 1 Stopbits
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
UCSRA = (1<<U2X);
//Es soll das zuletzt vom Hyperterminal empfangene ASCII-Zeichen
//dezimal angezeigt werden
while(1)
{
while( !(UCSRA & (1<<RXC)) ); //Warten bis der Uebertragungspuffer ein Zeichen empfangen hat
akku = UDR; //Zeichen aus dem Puffer holen
//...und anzeigen
PORTC = akku;
}
}
Code 0-3: rs232_empfangen.c - Testprogramm, um die serielle Datenübertragung vom PC zum Mikrocontroller zu überprüfen. An PortC sollten z.B. LEDs angeschlossen sein.
Werkseitige Belegung der Fuse-Bits beim ATmega32
---------------------------- Fuse HIGH Byte: Bit Beschreibung Default Bit 7 Enable OCD 1 Bit 6 Enable JTAG 0 enabled! Bit 5 Enable SPI 0 Bit 4 Oscillator options 1 Bit 3 EEPROM is preserved 1 Bit 2 Select Boot Size 0 Bit 1 Select Boot Size 0 Bit 0 Select Reset Vector 1 Fuse LOW Byte: Fuse HIGH Byte: Bit Beschreibung Default Bit 7 Brown Out lev 1 Bit 6 Brown out en 1 Bit 5 Select start-up 1 Bit 4 Select start-up 0 Bit 3 Clock Source 0 Bit 2 Clock Source 0 Bit 1 Clock Source 0 Bit 0 Clock Source 1
Code 0-4: Werkseitige Belegung der Fuse-Bits beim ATmega32.