-
        

Ergebnis 1 bis 6 von 6

Thema: C Noob

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2008
    Beiträge
    15

    C Noob

    Anzeige

    sry erstmal dafür das es eventuell das falsche Forum ist, habe aber kein besseres gefunden.

    Also folgendes: Ich habe mir aus zeitlichen Gründen wie extremer Faulheit^^ in den Kopf gesetzt einen Staubsaugerroboter zu bauen. Was brauch der?
    Klar: Entfernungssensoren und eines dieser hochgepriesenen Rn-Controls. Habe mich eindeutig dafür entschiedne da es wirklich gut zu seins cheint.
    So aber die programmierung.....
    Bin erst in der 8ten Klasse und will später etwas in Richtung Sonden und Robotertechnik machen. Da aber aus angeblichen Lehrermangel nicht mal Englisch vernünftig unterrichtet wird, habe ich auch kein Technik.
    Habe mich also durch ein Tutorial zu C gelesen und habe im Prinzip gelernt wie ich rechungen ausführe und Variablen deklariere und definiere.

    Aber kann mir bitte einer erklären wie ich damit jemals sonne Diode zum blinken bekommen soll? Geschweigeden einen Sensor einstellen?.
    Gibt es irgendwo codes die ich eingeben muss um diese und diese Dinge ausführen zu lassen?

    Also bitte nicht mit: Fang klein an lass die Diode brenne...kommen. Das mache ich so oder so. Bloß ich will nicht 51 Euro ausgeben für nen board, wenn ich nicht das Grundprinzip verstehe.

    So eins noch: ich will mich hier nicht nur auf C festlegen. Meinetwegen kanns auch Basic oder Pascal sein (Bitte nicht Assemlber absolut nicht mein Fall aber wenns sein muss).

    Vielleicht vertue ich mich ja auch völlig aber irgendwie...kA.

    Also danke schonmal im Vorraus

    MFG Justin

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    03.11.2004
    Ort
    Süderlügum
    Alter
    36
    Beiträge
    86
    Hallo erstmal.

    Also, prinzipiell brauchst Du weder Entfernungssensoren noch ein RN-Control.
    Kommt immer drauf an was das Gerät können soll, dafür bräuchten wir mehr Infos über Dein Wissen und Deine Möglichkeiten.

    Da ein Roboter des Öfteren aus mehr besteht als aus Software, wären in erster Linie die elektronischen Kenntnisse wichtig.
    Wenn Du eine kleinere Schaltung aufbauen und eventuell sogar ne Platine ätzen kannst, ist das schon ein guter Anfang.

    Zum Microcontroller: Da gibts ja die diversesten Modelle, man kann selbstverständlich etwas schon "fertiges" wie ein RN-Control benutzen, muss man aber halt nicht. Eigentlich langt in diesem Zusammenhang ein AVR (z.B. Atmega32 als DIL, hat für vieles genug Pins und ist leicht zu löten) und ein Programmer für das gute Stück. Da gibts auch etliche Modelle, schau Dich mal im RN Wiki um oder kauf Dir eins, z.B. AVRISP.

    Auch zum Thema LEDs leuchten/blinken lassen gibts meine ich im Wiki einen Artikel mit einer Grundschaltung.
    Das lässt sich auch kurz zusammenfassen: LED mit Widerstand an einen Pin löten, das andere Ende entweder auf VCC oder GND, ist Geschmackssache.
    Nun zur Software:
    Den Pin als Ausgang konfigurieren und wechselweise an- respektive ausschalten, dazwischen natürlich mit einer Verzögerung, damit es nicht im MHz-Bereich blinkt.

    Hier mal ein Code-Schnipsel:
    Code:
    #include <avr/io.h>
    #define F_CPU 16000000
    #include <util/delay.h>
    
    
    #define led_ddr		DDRA
    #define led_port	PORTA
    #define led			PA0
    
    int main(void){
    	//LED-Pin als Ausgang konfigurieren
    	led_ddr|=(1<<led);
    
    	for(;;){
    			led_port|=(1<<led);
    	
    			for(unsigned char j=0;j<30;j++){		//Warte...
    				_delay_ms(10);
    			}
    			
    			led_port&=~(1<<led);
    
    			for(unsigned char j=0;j<30;j++){		//Warte...
    				_delay_ms(10);
    			}
    
    	}
    	
    	return 0;
    }
    Die LED würde hierbei an PA0 hängen und blinken. So ein ähnliches Programm schreibst Du dann, kompilierst es (z.B. mit WinAVR, gibts gratis) und flashst es mit dem Programmer in den Microcontroller. Das ist eigentlich schon alles.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2008
    Beiträge
    15
    Okay war jetz wirklich alles etwas sher kurz gehalten von mir. Ich möchte halt das mein Roboter nicht überall aneckt. So und dafür brauche ich doch eigentlich einen Mikrocontroller. Klar ich kann auch einen einchiprechner nehmeb und es gibt noch andere möglichkeiten. Ich will einfach nur verstehen, wie ich mit diesen mehr oder weniger (im ersten moment) unnützen rechnungen hardware ansprechen soll. Mir wäre es schon lieb wenn mir jemand sonne art Übungsaufgaben mit Erklärung schickt. Irgendwie sowas.
    Der Roboter selbst interessiert ja eigentlich nciht. Das habe ich nur so geschrieben als kleine Einführung so.
    Ich mein ob ich einen Sensor oder etwas anderes einstellen will....


    Ja sowas wie du mir da geschriebenb hast mit dem code....das gefällt mir. Mir geht es nicht um kosten oder irgendwas. ich mache das alles damit ichs lerne. klar kann ich mir son Teil kaufen. Naja aber bevor ich mir etwas bestelle möchte ich verstehen wie ich es hinterher zum laufen bringe (nur im Ansatz)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    31.08.2005
    Ort
    bei Graz
    Alter
    27
    Beiträge
    225
    Hallo,
    auf meiner Website habe ich ein kleines C Tutorial für Microcontroller geschrieben. Wenn du das blickst kannst du zwar noch keine Sensoren auslesen. Aber zumindest mal ne Led blinken lassen. Auch werden die für den Anfang wichtigsten Sachen in C erklärt.

    http://mofe.at/index.php?site=c,%20f...ory=3tutorials

    Hier wird jedoch rein das programmieren an sich erklärt. . .

    lg MoFe

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.11.2004
    Ort
    Süderlügum
    Alter
    36
    Beiträge
    86
    Lies Dich z.B. mal hier rein: http://www.mikrocontroller.net/articles/AVR-Tutorial
    Damit hab ich damals auch mit den AVRs angefangen, glaube ich zumindest.
    Als Hardware hatte ich einen Atmega32 mit nem 16 MHz Quarz, als Programmieradapter einen AVRISP (gibts z.B. bei Reichelt).
    Dann fix eine Grundschaltung aufgebaut, und los gings.

    Ich weiss grade nicht was Du mit "unnützen Rechnungen" meinst, vermute allerdings Du willst wissen wie jetzt genau der Zusammenhang zwischen Programm und der aktuellen Hardware aussieht.

    Die Atmegas haben Tristate-Pins. Das heisst soweit, die Pins können 3 Zustände annehmen. Also nicht einfach Strom an, Strom aus, wie man meinen könnte, sondern Pin ist auf VCC-Pegel ("Strom fliesst raus"), Pin ist auf GND-Pegel ("Strom fliesst rein"), Pin ist hochohmig ("aus");

    Um bei meinem Beispiel zu bleiben, erstmal wird das Datenrichtungsregister DDRA konfiguriert. Das regelt ob der Pin ein Ausgang ("Strom fliesst raus/rein") oder Eingang ("Strom ist aus") sein soll.
    In diesem Fall ein Ausgang, denn man will was zum leuchten bringen.
    Also wird das Bit für PA0 im Register DDRA auf 1 gesetzt: DDRA|=(1<<PA0);

    Dann, in der Schleife, wird der Pin immer zwischen Hi ("Strom fliesst raus") und Lo ("Strom fliesst rein") getoggelt.
    PORTA|=(1<<PA0); <-- Pin geht auf Hi-Pegel
    PORTA&=~(1<<PA0); <-- Pin geht auf Lo-Pegel

    Es sieht jetzt zwar etwas anders aus als in meinem Codeschnipsel, ist aber das Gleiche. Hier hab ich jetzt keine Defines verwendet.
    Die sind, zumindest im einfachsten Fall, bloss was fürs Auge und werden vom Präprozessor vor dem Compilieren automatisch bearbeitet.

    Also wenn man schreibt:
    #define led_ddr DDRA
    dann ersetzt der Präprozessor jedes Vorkommen von led_ddr im Quellcode durch DDRA. Ist also ein "Suchen und Ersetzen", hat halt optische Gründe für den Programmierer, der, falls er die LED mal auf einen anderen Port setzen will nicht jedes Vorkommen von DDRA von Hand anpassen muss, sondern nur die eine Stelle im define.

    Die Register wie DDRA, PORTA, PINA, PA0, PA1... usw sind übrigens in der io.h deklariert und auch im Datenblatt des Controllers beschrieben was sie machen.

    Wichtig ist sich in Bit-Byte-Zusammenhänge einzulesen. Denn damit hängen die gesamten Ein- und Ausgabefunktionen vom Controller zusammen.

    Das soll jetzt mal ein 8-Bittiger Port (z.B. Port A) am Atmega sein, bildlich auf die Pins am Chip geschaut.
    00000000

    Wenn man jetzt im Programm schreiben würde
    PORTA=62;
    dann würde es so aussen in der wirklichen Welt ankommen:
    00111110

    Die Pins die hier mit "1" markiert sind, würden also auf VCC-Pegel liegen, die anderen auf GND. Warum ausgerechnet 00111110 und nicht anders? 62 ist, als Binärzahl umgewandelt, 111110...

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2008
    Beiträge
    15
    Hmmm.

    Also das es hinterher Binär ankommt wenn ich es compiliere ist klar.
    Ich meinte mit unnützen Rechnungen eigentlich folgendes: http://www.tutorials.at/ (Sry ist etwas doof da die Seite keine direkten Links hat. Im C tutorial im 2ten Kapitel wird halt gelehrt wie ich Rechnugen ausführe.
    Diese Geschichte mit

    int main ()
    {
    int x=10, y=15;

    printf (" d% + %d ergibt %d ", x, y, x+y);
    getch();
    }

    Wenn ich das jetz in nen Compiler eingebe und ich führe dieses "Programm" aus (ich weiß es fehlt #include etc.) dann erscheint ja nur: 10 + 15 ergibt 25.
    So und ich hatte halt probleme mir vorzustellen wie ich damit Hardware ansprechen kann und ihr sagen: Führe Anweisung xyz aus.

    Dabei habe ich aber irgendwie völlig ausser Acht gelassen, dass man mit C ja nicht nur Roboter programmiert.
    Und ich habe eigentlich immer nach einem Tutorial gesucht das mir, zuerst natürlich die Basiskenntnisse vermittelt, aber auch darauf eingeht wie mein Programm aussehen muss im Bezug auf Microcontroller.

    Kann ich den dein Tutorial später benutzen um das RN-Control Board bzw dessen Herzstück den AVR Mega 32 zu Programmieren?

    Edit: Oh habs gelesen. Du hattest damals auch einen Atmega32 okay^^

    Gibt es irgendwo sonne Art Kästen mit dem nötigem zubehör? Es ist nicht besonders leicht für mich ausserhalb der Schule an Elektroartikel ranzukommen, wenn ich sie nicht Bestellen möcht und das dauer ja auch jedesmal bis das ganze zeug ankommt und ich will mir auch nicht jeden kleinen elko und taster 5 mal bestellen irgendwo.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •