Desshalb möchte ich euch ein kleines Hard- und Softwareprojekt vorstellen.
Weil ich gerade nichts zu zun habe, werde ich es ein bisschen ausführlicher beschreiben, für die die es interessiert.
Falls ihr Fragen habt fragt einfach und Inputs sind gerne gesehen



Beim Projekt handelt es sich um einen kleinen Wecker, welcher ohne mechanische Eingaben wie Taster, Schalter usw. auskommt, sonder nur mit der Bewegung des Weckers.
Dies funktioniert mit einem IC, welches die Lage des Gerätes anzeigt. Aus diesen Informationen kann die Bewegung (links,rechts,hinten,vorne) ausgewertet werden.
Hier das Blockschaltbild und Schema:
Blockschaltbild

Schema:

Das Gerät besteht aus 5 Blöcken exkl. Speisung:
Dem Real time clock, benötigt für die Uhranzeige
Dem Beschleunigungssensor, benötigt um die Lage des Gerätes zu bestimmen (x-,z-,y-Achsen)
Dem Grafikdisplay & der Hintergrundbeleuchtung, benötigt für die Benutzerausgabe
Dem Lautsprecher
Dem uController, benötigt um die ganzen Hardware zu steuern.
Das Funktionsprinzip ist denkbar einfach, es wird die Bewegung bestummen und die dementsprechende Aktion ausgeführt.
Bedienung:

Technische Daten:
Speisespannung 12-40V
Stromverbrauch ca. 150mA
Software,
Die Software läuft auf einem uC der PIC Familie. Für die die es Interessiert hier ist das Main(Die ganze Software würde den Rahmen sprengen xD)
/**************************************************************************
* Titel: MAC360 File: main.c *
* Autor: - Version: 1.0 *
* Datum: 11.09.2009 *
**************************************************************************/
#include "..\Include\main.h"
#pragma jis //Enable JIS character handling in strings (ä,ö,ü)
TRichtung Lage = E_links;
TRichtung letzteLage;
TZeit aktuelleZeit;
TZeit neueZeit;
TZeit weckZeit;
TTage wochenTage;
unsigned char wecktag;
unsigned char weckton;
unsigned char clock_set,ton;
unsigned int loop_delay_value = 0;
unsigned char W_wecktag,W_weckzeitstunden,W_weckzeitminuten;
unsigned char TMR3L_reload,TMR3H_reload;
unsigned int Xpos;
unsigned int Ypos;
unsigned int Zpos;
unsigned char modus, submenuNr=0, submenuPos=0, menuPos=0;
//=========================================================
void init(void) // Komplette Peripherie initialisieren
{
TRISA=0b10000111; // I/Os konfigurieren
TRISB=0b00110000;
TRISC=0x00;
adc_init();
spi_init();
i2c_init();
pwm_init();
lcd_init();
rtc_init();
ton_init();
setcolor(rtc_read(0x0A)*10,rtc_read(0x0B)*10,rtc_read(0x0E)*10); // RGB-Werte auslesen
W_wecktag=rtc_read(0x10); // Aktuelle Wecktage auslesen
wecktag=rtc_BCD_to_char(rtc_read(0x04));
weckZeit.Stunden=rtc_read(0x11); // Aktuelle Weckzeit auslesen
weckZeit.Minuten=rtc_read(0x12);
weckton = rtc_read(0x0C); // Weckton auslesen
clock_set=rtc_read(0x0D); // Alarm on/off auslesen
}
//======HAUPTPROGRAMM=======================================
void main (void)
{
init(); // Peripherie initialisieren
lcd_draw_picture(10); // Begrüssungs Bild ausgeben
lcd_update();
delay_ms(3000);
lcd_set_cursor(0,0);
Sound_(0);
PR2= 0;
CCPR1L = 0;
while(1)
{
//loop_delay_ms(500);
aktuelleZeit = get_time(); // Aktuelle Zeit auslesen
handle_action(get_action()); // Handlung in Abhängigkeit der aktuellen Lage durchführen
display(); // Aktuelles Menü/Submenü in Shadow Ram schreiben
lcd_update(); // Ausgabe auf Display
alarm(); // Alarm überprüfen
standby(); // 15 Sek. keine Lageänderung, Display auschalten. Sobald Lägeänderung auftritt, Display einschalten.
}
}
Hoffe es hat den einen oder anderen interessiert

Gruss Renfahrer