kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu
kramann.info
© Guido Kramann

Login: Passwort:




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 Calculator: http://www.engbedded.com/fusecalc

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.