kramann.info
© Guido Kramann

Login: Passwort:










EmbSyst
1 day_by_day
2 Eingebettete_Systeme
..2.1 Softwareentwicklung
....2.1.1 AgileSoftwareentwicklung
....2.1.2 Verhalten
....2.1.3 Entwurfsmuster
....2.1.4 FuzzyRegler
....2.1.5 Uebung
..2.2 Arduino
....2.2.1 Uebung1
..2.3 Android
....2.3.1 UML
......2.3.1.1 Volumenberechnung
......2.3.1.2 UML_Klassendiagramm
......2.3.1.3 Konstruktor
......2.3.1.4 Statische_Variable
....2.3.2 bluej
....2.3.3 Threads
....2.3.4 Interfacedesign
....2.3.5 Android
......2.3.5.1 Getting_Started
......2.3.5.2 App
......2.3.5.3 Beispielprojekt
........2.3.5.3.1 Richtlinien
........2.3.5.3.2 Anforderungen
........2.3.5.3.3 Layout
........2.3.5.3.4 Projekt_einrichten
........2.3.5.3.5 Refactoring
........2.3.5.3.6 Icon
........2.3.5.3.7 Icon2
........2.3.5.3.8 Kurzanleitung
........2.3.5.3.9 Architektur
........2.3.5.3.10 Anwendungsklasse
......2.3.5.4 Threads
......2.3.5.5 Activities
......2.3.5.6 Was_ist_wo
......2.3.5.7 Regelungssysteme
........2.3.5.7.1 Servo
........2.3.5.7.2 Fahrzeug
......2.3.5.8 ADB_Apps
......2.3.5.9 Veroeffentlichen
......2.3.5.10 Einzelheiten
........2.3.5.10.1 Bildschirmaufloesung
........2.3.5.10.2 Parameter
........2.3.5.10.3 Permission
........2.3.5.10.4 Latenzzeit
......2.3.5.11 Tonerkennung
........2.3.5.11.1 Wahrscheinlichkeitsrechnung
........2.3.5.11.2 Kovarianz_Scilab
........2.3.5.11.3 Java_Threads
........2.3.5.11.4 Java_Reflection
....2.3.6 Processing
......2.3.6.1 Installation
......2.3.6.2 Erste_Schritte
......2.3.6.3 Mechatronik
......2.3.6.4 Bibliotheken
......2.3.6.5 Uebung
......2.3.6.6 Snippets
........2.3.6.6.1 Dateioperationen
........2.3.6.6.2 Bilder
........2.3.6.6.3 GUI
........2.3.6.6.4 Text
........2.3.6.6.5 PDF
........2.3.6.6.8 Maus
........2.3.6.6.10 Zeit
........2.3.6.6.13 Animation
........2.3.6.6.15 Simulation
......2.3.6.7 Referenzen
....2.3.7 Android_Processing
......2.3.7.1 Basics
......2.3.7.2 Einrichten
......2.3.7.3 Crossplattform
......2.3.7.4 sinus
......2.3.7.5 sample
......2.3.7.6 analyse
......2.3.7.7 synthese
......2.3.7.8 Hilfsapps
......2.3.7.9 Eigene_Library
....2.3.8 Processing_VR
....2.3.9 Shapes3D
....2.3.10 TextToSpeech
....2.3.11 Internetprogrammierung
......2.3.11.1 Codegenerierung
......2.3.11.2 PHP_Programmierung
......2.3.11.3 PHP_OOP
......2.3.11.4 Java
......2.3.11.5 UDP
......2.3.11.6 Internetkontrolle
........2.3.11.6.1 Kamerabild
....2.3.12 OSC
......2.3.12.1 Datenaustausch
......2.3.12.2 i2audiolab
......2.3.12.3 Ardour
....2.3.13 Netzwerkprogrammierung
....2.3.14 JNI
....2.3.15 Erweitern
......2.3.15.1 sprich
......2.3.15.2 spiel
....2.3.16 thbvr
....2.3.17 Reflection
....2.3.18 Script
....2.3.19 Java3D
3 Echtzeitprogrammierung
..3.1 Echtzeit
..3.2 Korrektheit
..3.2 Semaphoren
..3.3 Hardware
..3.5 Synchronprogramm
..3.6 Zustandsmaschine
..3.7 Arduino
....3.7.1 Uebung
....3.7.2 RTOS
....3.7.3 Scheduler
....3.7.4 Semaphor
......3.7.4.1 Laufkatze
......3.7.4.2 Java
......3.7.4.3 Semaphor
....3.7.5 Messages
..3.8 Android
....3.8.2 Threads
......3.8.2.1 Java
......3.8.2.2 Synchronisierung
..3.9 Petrinetze
....3.9.1 Installation
....3.9.2 Test
4 KI
..4.1 Unueberwachtes_Lernen
..4.2 Agentensysteme
....4.2.1 Architekturen
......4.2.1.1 Verhalten
......4.2.1.2 Entwurfsmuster
....4.2.2 SUMO
......4.2.2.1 GettingStarted
......4.2.2.2 Antrieb
......4.2.2.3 Sensoren
......4.2.2.4 Zeitbasis
......4.2.2.5 Fernsteuerung
......4.2.2.6 Umsetzung_Fernst
......4.2.2.7 Fernsteuerung3
......4.2.2.10 Umsetzung
......4.2.2.11 Sockelsoftware
......4.2.2.12 Plan
......4.2.2.13 Lernen
........4.2.2.13.1 Parameter
........4.2.2.13.2 Identifikation
........4.2.2.13.3 Java
..4.3 Genetische_Algorithmen
....4.3.1 Heuristiken
....4.3.2 Genalgorithmus
..4.4 Kalmanfilter
....4.4.1 Vorarbeit
....4.4.2 Minimalversion
....4.4.3 Beispiel
5 Bildverarbeitung
..5.1 Gestalttheorie
..5.2 Bildverarbeitung
6 Technische_Systeme
..6.1 Kulturgeschichte
..6.2 Technikphilosophie
..6.3 Anthropozaen
7 Literatur
kramann.info
© Guido Kramann

Login: Passwort:




ADW0 testen

(EN google-translate)

(PL google-translate)

Einfacher Test des Entfernungssensors bei ADW0: Die Nähe eines Hindernisses wird als Helligkeit der LEDs umgesetzt, indem ein PWM-Signal "selber programmiert" wird.

Einfacher Test mit LEDs
//   avr-gcc -O2 -mmcu=atmega32 adww.c -o adww.elf 
//   avr-objcopy -O ihex -j .text -j .data adww.elf adww.hex 

//   Upload über RobotLoader_20100712



#include<avr/io.h>

int main()
{
    int wert;
    int x=0;
    unsigned char akku, akku2;
    unsigned long pause=0;

    ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
    ADMUX = (0<<REFS1) | (1<<REFS0) | (1<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
    DDRA &= 0b11111110;

    while(1)
    {
        akku2 = ADCL; //muss erst ausgelesen werden, damit ADCL verfügbar ist.
	akku  = ADCH;
        wert = akku*4;

        PORTC |=  0b01110000;
        for(pause=0;pause<wert;pause++)
            DDRB|=0;

        PORTC &= ~0b01110000;
        for(pause=0;pause<1023 - wert;pause++)
            DDRB|=0;
    }
}

Code 0-1: adww.c

Verwendung des seriellen Terminals
//   avr-gcc -O2 -mmcu=atmega32 adwww.c -o adwww.elf 
//   avr-objcopy -O ihex -j .text -j .data adwww.elf adwww.hex 

//   Upload über RobotLoader_20100712



#include<avr/io.h>

#define TAKTFREQUENZ 8000000
#define BAUDRATE 38400

int main()
{
    int sensor;
    unsigned char akku, akku2;
    unsigned long pause=0;

    //Merken des in UBRR zu speichernden Wertes.
    unsigned int baudregister = TAKTFREQUENZ/8/BAUDRATE-1;

    //ADW konfigurieren
    ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
    ADMUX = (0<<REFS1) | (1<<REFS0) | (1<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
    DDRA &= 0b11111110;

    //Seriell konfigurieren:
    //Aktivieren der RS232-Schnittstelle des Mikrocontrollers:
    
    //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);


    while(1)
    {
        akku2 = ADCL; //muss erst ausgelesen werden, damit ADCL verfügbar ist.
	akku  = ADCH;
        sensor = (akku<<2) | (akku2>>6); 

        if(sensor>600)    //ca. maximaler Wert, der tazsächlich auftritt, allg. 10 Bit: 0..1023
            sensor = 600;

        PORTC |=  0b01110000;
        for(pause=0;pause<sensor;pause++)
            DDRB|=0;

        PORTC &= ~0b01110000;
        for(pause=0;pause<600 - sensor;pause++)
            DDRB|=0;

        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor/1000;                    //Daten in den Puffer schreiben und übertragen
        sensor%=1000;
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor/100;                    //Daten in den Puffer schreiben und übertragen
        sensor%=100;
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor/10;                    //Daten in den Puffer schreiben und übertragen
        sensor%=10;
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor;                    //Daten in den Puffer schreiben und übertragen
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0;
	UDR = '\n';
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0;
	UDR = '\r';

    }
}

Code 0-2: adwww.c - Verwendung des seriellen Temrinals.

Mittelwertbildung - Entfernung zur Tischkante wird sichtbar
//   avr-gcc -O2 -mmcu=atmega32 adwww2.c -o adwww2.elf 
//   avr-objcopy -O ihex -j .text -j .data adwww2.elf adwww2.hex 

//   Upload über RobotLoader_20100712



#include<avr/io.h>

#define TAKTFREQUENZ 8000000
#define BAUDRATE 38400

#define MAXARR 200

int main()
{
    int sensor;
    unsigned char akku, akku2;
    unsigned long pause=0;

    int index=0;

    int arr[MAXARR];

    //Merken des in UBRR zu speichernden Wertes.
    unsigned int baudregister = TAKTFREQUENZ/8/BAUDRATE-1;

    //ADW konfigurieren
    ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
    ADMUX = (0<<REFS1) | (1<<REFS0) | (1<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
    DDRA &= 0b11111110;

    //Seriell konfigurieren:
    //Aktivieren der RS232-Schnittstelle des Mikrocontrollers:
    
    //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);


    while(1)
    {
        akku2 = ADCL; //muss erst ausgelesen werden, damit ADCL verfügbar ist.
	akku  = ADCH;
        sensor = (akku<<2) | (akku2>>6); 

        if(sensor>600)    //ca. maximaler Wert, der tazsächlich auftritt, allg. 10 Bit: 0..1023
            sensor = 600;


        arr[index]=sensor;

        PORTC |=  0b01110000;
        for(pause=0;pause<sensor;pause++)
            DDRB|=0;

        PORTC &= ~0b01110000;
        for(pause=0;pause<600 - sensor;pause++)
            DDRB|=0;

        index++;

        if(index>=MAXARR)
        {

            sensor=0;
            for(index=0;index<MAXARR;index++)
                sensor+=arr[index];
            sensor/=MAXARR;
            index=0;

        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor/1000;                    //Daten in den Puffer schreiben und übertragen
        sensor%=1000;
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor/100;                    //Daten in den Puffer schreiben und übertragen
        sensor%=100;
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor/10;                    //Daten in den Puffer schreiben und übertragen
        sensor%=10;
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0; //Warten bis der Uebertragungspuffer leer ist
        UDR = 48 + sensor;                    //Daten in den Puffer schreiben und übertragen
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0;
	UDR = '\n';
        while( !(UCSRA & (1<<UDRE)) ) DDRB|=0;
	UDR = '\r';
       
        }
    }
}

Code 0-3: adwww2.c - Durch die Mittelwertbildung wird die Entfernung zur Tischkante erfaßbar.