PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ProBot vs. Bagger



nici
24.04.2010, 22:42
so hallo ihr's also bin die nici bin elektrisch etwas angehaucht .
und da ich "mehr" damit machen will versuch ich es mal allein zu lernen, wie man etwas c programmiert und so.

das ist mein projekt



http://img.webme.com/pic/w/wiesel86c/bagger.jpg http://img.webme.com/pic/w/wiesel86c/bot1.jpg
http://img.webme.com/pic/w/wiesel86c/motor.jpg

soweit so gut jetzt noch schnell c lernen :^o

oberallgeier
24.04.2010, 23:07
Hi, nici,

willkommen im Forum.

... versuch ich es mal allein zu lernen, wie man etwas c programmiert und so ...so gaaanz allein brauchst Du es nicht zu lernen. Vermutlich hast Du schon beim Suchen ein paar Lernhilfen gefunden!?
Grundlegendes zur Sprache (klick) (http://www.rn-wissen.de/index.php/C-Tutorial)
... und noch mal C (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial) - nur ein bisschen anders vorgestellt.
A VR-Controller in C programmieren (http://www.rn-wissen.de/index.php/Avr-gcc)
Natürlich gibts noch mehr, online und auch Bücher. Aber vielleicht reicht das für Deinen Anfang.

nici
24.04.2010, 23:21
ja da war ich schon mal nur komm ich damit nicht zurecht weil meine programm die" stdio.h" nicht hat und auch nicht so richtig annehmen will die meisten tutorial's sind für den mega 32 und ohne vorkentnisse hab ich keine ahnung wie ich sie umschreiben muss aber in erster lienie steht das mit stdio.h was ich noch nicht verstehe .

oberallgeier
25.04.2010, 08:58
ja da war ich schon mal nur komm ich damit nicht zurecht ...Na ja, das ging mir anfangs auch so.

Es wird leichter fallen Dir zu raten, wenn Du mehr über Dein Projekt schreibst: a) Welche Entwicklungsumgebung hast Du - ziemlich verbreitet für C ist das AVRStudio. b) Welchen Controller (Firma, Typ) hast Du - Dein Schaltplan ist bei mir nicht so leserlich angekommen, dass ich den Typ des IC3 herauslesen kann. c) Wie sieht Dein Programm ungefähr aus (Ablauf in Stichpunkten). Ich vermute, dass Du anfangs die Geschwindigkeit der Motoren nicht variieren willst.


... meine programm die" stdio.h" nicht hat und auch nicht so richtig annehmen will ...Welches Programm hat die stdio.h nicht? Welches Programm will die nicht "annehmen" - wobei ich diese Aussage nicht verstehe. Ich gehe mal davon aus, dass Du Dich auf das AVRStudio beziehst. Da ist die stdio.h ein file, der in der Bibliothekssammlung enthalten ist - beispielsweise in der Direktory C:\Programme\WinAVR-20090313\avr\include. Eingebunden wird sie in Deinem Programm durch ein
#include <avr/io.h> //
siehe z.B. hier. (http://www.rn-wissen.de/index.php/C-Tutorial#Aufbau_eines_C-Programmes)


... die meisten tutorial's sind für den mega 32 und ohne vorkentnisse hab ich keine ahnung wie ich sie umschreiben muss ...Im Wesentlichen sind die Befehle in C gleich auch für verschiedene Controller. Anpassungen sind notwendig für controllerspezifische Register, evtl. Portnamen, Ti mer etc. Dazu solltest Du ein Datenblatt für Deinen Controller parat liegen oder im Computer gespeichert haben. Aktuelle Datenblätter von At mel gibts hier. (http://www.atmel.com/dyn/products/datasheets.asp?family_id=607) Sinn macht es natürlich, auch das Datenblatt vom mega32 parat zu halten - wenn Du ein Beispielprogramm von dem modifizierst, um zu sehen, was GENAU geändert werden muss. Dazu wäre eine Paramtertabelle der Controller (http://atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=1250&Direction=ASC#760) nützlich. Und für genauere Informationen zu Portbelegung und Porteigenschaften habe ich mir eine Tabelle selbst (http://oberallgeier.ob.funpic.de/AVR_%b5C_teil.jpg) geschrieben . . . .

nici
25.04.2010, 09:51
also seh schon da fehlt mir noch einiges
ich habe den probot von conrad ( http://www.conrad.de/ce/de/product/191919/ROBOTERSYSTEM-PRO-BOT128-BAUSATZ/SHOP_AREA_37371&promotionareaSearchDetail=005 ) mein IDE ist C-control Pro das war dazu und wenn ich da das tutorial machen will kommt beim ersten schon der fehler indude datei nicht gefunden (ist klar weil die gibt es da ja nicht )


dazu sind :

DCF_Lib.cc
IntFunc_Lib.cc
Key_Lib.cc
LCD_Lib.cc
String_Lib.cc

gibt es die stdio.h und stdlib.h einvach zum runderladen ?
ich nehme mal an das es normalle dateien sind die ich nur speichern muss und mein IDE sagen wo sie ist .! oder liege ich da falsch ?


#include <stdio.h>
#include >stdlib.h>

int main (int argc, char *argv[])
{
printf("Hallo Welt!?\n"9 ;

system("PAUSE");
return 0;
}



der IC3-
ist der CD 4093
die schaltung leuft auch also
fährt umher, und weicht dabei hindernisse über
das ACS aus leuft mit den normallen demo programm was
auch dazuwar

aber danke schon mal das ihr es mit mir versucht

Jimmybot
25.04.2010, 11:32
also seh schon da fehlt mir noch einiges
ich habe den probot von conrad ( http://www.conrad.de/ce/de/product/191919/ROBOTERSYSTEM-PRO-BOT128-BAUSATZ/SHOP_AREA_37371&promotionareaSearchDetail=005 ) mein IDE ist C-control Pro das war dazu und wenn ich da das tutorial machen will kommt beim ersten schon der fehler indude datei nicht gefunden (ist klar weil die gibt es da ja nicht )


dazu sind :

DCF_Lib.cc
IntFunc_Lib.cc
Key_Lib.cc
LCD_Lib.cc
String_Lib.cc

gibt es die stdio.h und stdlib.h einvach zum runderladen ?
ich nehme mal an das es normalle dateien sind die ich nur speichern muss und mein IDE sagen wo sie ist .! oder liege ich da falsch ?


#include <stdio.h>
#include >stdlib.h>

int main (int argc, char *argv[])
{
printf("Hallo Welt!?\n"9 ;

system("PAUSE");
return 0;
}



der IC3-
ist der CD 4093
die schaltung leuft auch also
fährt umher, und weicht dabei hindernisse über
das ACS aus leuft mit den normallen demo programm was
auch dazuwar

aber danke schon mal das ihr es mit mir versucht


die grüne Schrift ist mal grauen haft ;)



[color=#00ff09]#include <stdio.h>
#include >stdlib.h>

int main (int argc, char *argv[])
{
printf("Hallo Welt!?\n"9 ;

system("PAUSE");
return 0;
}

was mir noch auffällt: Du solltes Programm unbedingt kommentieren.
Nicht damit es andere verstehen, sondern damit du nach Monaten dein eigenes Programm verstehst. Ist mir selber schon passiert, dass ich Monate später ein Teilcode über nehmen wolle und dies natürlich schief ging, weil der Teilcode nicht kommentiert war.

nici
25.04.2010, 11:44
emm sorry aber wie hilft mir deine andwort bei mein problem?

geht das bei dir ? hast du auch c-control pro ?
geht bei dir stdio.h ?

Jimmybot
25.04.2010, 15:24
Dann frage ich mich halt doof durch:

1. Wo wird "Hallo Welt" aus gegeben? LCD? Monitor? Monitor vom PC?
2. Code abgetipt, oder rein kopier? (Das sind ein paar Zeichenfehler, die beim schnellen tippen passieren)

int main (int argc, char *argv[])
- Wo für brauchst du die Variable argc und das Array argv?

Zudem hast du selber gesagt, dass du Neuling auf dem Gebiet bist.
Da geben ich gerne Tipps außerhalb des Themas, um anderen die gleichen Fehlern zu ersparen die mir passiert sind und unnötig Zeit und Nerven gekostet haben.


Aber mal ein Wink mit dem Zaunpfahl. C-Control Pro ist ein Programm zu programmieren von µC (bzw. von Systemen, die über USB oder RS232 am PC angeschlossen sind) und nicht von Anwendungen, die auf dem Computer laufen sollen (Daher kennt C-Control Pro auch stdio.h nicht)

nici
25.04.2010, 15:39
der wink mit dem zaunpfahl der ist gut das hat noch keiner gesagt !!!
alle sagen immer nur ich soll das tutorial machen und der code ist aus ein solchen tutorial abgetipt. die ausgabe hätte über den pc erfolgen sollen .
aber nicht für meine sache nur für das tutorial .

Jimmybot
25.04.2010, 15:48
Schön dass ich dir den Stein weg rollen konnte :)

Ich vermute dann mal, dass du jetzt ein Programm sucht, mit dem du C lernen kannst.

Ich habe in der Schule C mit Turbo C gelernt, würde es also hier weiter empfehlen.
http://de.wikipedia.org/wiki/Turbo_C

Naturp
25.04.2010, 15:54
Hallo
bin auch neuling!-Und auch Pro-Bot

Wenn du vom Controller aus einen Text auf deinem PC anzeigen willst must du "Msg_writeText" verwenden:

Hier direckt aus dem Handbuch vom C-Controll kopiert!

Syntax

void Msg_WriteText(char text[]);

Sub Msg_WriteText(ByRef text As Char)

Beschreibung

Es werden alle Zeichen des char array bis zur terminierenden Null ausgegeben.

Parameter

text Zeiger auf char array



Kriegst du beim komplimieren keine Meldung das er include nicht kennt??
Die Libs kannst du ja bereits unter Optionen des Projekts laden..

Bin mir aber nicht sicher, da ich C-Controll mit Basic programiere!
Kenne aber LitleC von gamestudioA7 ;)

Habs inzwischen auch gemerkt das bei C-Controll alles anders ist :evil:
Diesen Controller brauche ich bei meinem CoffeBot zum letzten mal!!!!

Viel Spass
HD

nici
25.04.2010, 16:10
eigentlich bekomm ich den anfang nicht mit. die grund vorrausetzungen fehlen mir .
noch mal was ich eigentlich möchte und nicht verstehe :

ich verstehe nicht wo ich einen ein Bzw. ausgang zuweisse .

was ich habe ist der Mega 128 auf dem probot
laut daten platt heisst es
Modul /X4_8 vermute nur die pin belegung
M128 /35 vermute nur eine nummer
Port / PC0 das denke ich ist wichtig fürs programm
dann hab ich noch eine 2
#/ 16

so da hängt dann eine led drann
und an ein anderen port möchte ich ein taster gegen masse schalten wie lautet das einvachste programm das die led ein geht wenn ich den taster drücken .

z.B. am PC0 hängt die led
am PA7 der taster

Naturp
25.04.2010, 17:06
Hallo

Drück mal F1!
Dann kommt das Handbuch..
Dann Suchen nach PINBELEGUNG

Dort ist die entsprechende Tabelle..

Ich kann zu wenig C um dir mit sicherheit ein kluges prog zu sagen...
Ich habe einfach BASIC gelernt, weill beim ProBot auch alles in Basic ist..

Jimmybot
25.04.2010, 21:44
Ich würde erst mal folgende Sachen Programmieren (als Übung)

1. Einfach eine LED leuchten lassen
2. 2 LEDs nach ein ander Blinken lassen
3. "Lauflicht" Programmieren

Ich will damit bezwecken dass man die delay.h und den Timer Interrupt kennen lernt.

Warum delay.h und Timer Interrupt?
delay.h ist eine Headerdatei, die ein Funktion enthält, die den Controller "sinnlos" beschäftigt und somit eine Zeitverzögerung verursacht. Timer Interrupt lösen nur nach eine bestimmt Zeit ein Interrupt aus. Interrups sagen den Controller, dass er das Hauptprogramm pausieren soll um die Interrupt anweisung aus zu führen. Dannach mach der Controller an der Stelle in Hauptprogramm weiter, wo er unterbrochen wurde. Der Timer läuft im "Hintergrund, wie eine art Zähler".

Die Kenntnisse brauchst du, um den Taster zu entprellen (es sei den du hast es Hardware technisch gemacht)

Meines erachten sind folgende RN-Artikel ideal zum erlernen wie man mit µC arbeitet.

Da ist zum einen der Einstig:
http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht
Der vom Aufbau bis zu den ersten einfach Programm geht (LED blinken lassen)

http://www.rn-wissen.de/index.php/C-Tutorial
und hier ein C-Tut, dass die Kenntnisse von C vermittelt die für AVR programmieren für den Anfang reichen.
(C kann noch viel mehr als nur µC Programmieren, zB Spiele und Anwednungen für den Computer)

Naturp
26.04.2010, 10:51
Diese Tuturials und erklährungen können zwar ein bischen helfen, stimmen aber nicht mit C-Controll überein...das war mein gröstes problem

Im Handbuch für C-Controll ist ein Beispielprogramm für ein Blinklich in C!
Kanst ja das mal ausprobieren..

nici
26.04.2010, 19:40
ich find im handbuch nur prgrammteile
da du auch den probot hast poste mir doch bitte mal den code wo nur eine led blinkt


danke schon mal

Naturp
26.04.2010, 21:03
Hallo

Wenn du willst, kann ich dir das programm:

so da hängt dann eine led drann
und an ein anderen port möchte ich ein taster gegen masse schalten wie lautet das einvachste programm das die led ein geht wenn ich den taster drücken .

z.B. am PC0 hängt die led
am PA7 der taster


Machen..aber nur in Basic..
Meine Tastaur hat sich gerade verabschiedet..
must dich bis morgen mittag gedulden..;)

Naturp
27.04.2010, 13:24
Also

Programm in Basic um an auf Port PC0 ein LED einzuschalten:





#define LED1 16 'LED1 ist auf PortBit 16

Sub main()
Port_DataDirBit(LED1,1) 'Pin 16 wird als Ausgang genommen
Port_WriteBit(LED1,0) 'Pin 16 wird auf LOW gestellt!
End Sub

Das selbe In C

#define LED1 16

void main (void)
{
Port_DataDirBit(LED1,1)
Port_WriteBit(LED1,0)
}


Ein Blinklicht in C



#define LED1 16
#define LED2 17
#define OFF 1
#define ON 0
#define OUT 1


void main(void)

{
Port_DataDirBit(LED1,OUT);
Port_DataDirBit(LED2,OUT);

while(true) // Endlosschleife
{
Port_WriteBit(LED1,ON); //LED1 einschalten
Port_WriteBit(LED2,OFF); //LED2 ausschalten
AbsDelay(1000); //Warten 1 Sek
Port_WriteBit(LED1,OFF); //LED1 auschalten
Port_WriteBit(LED2,ON); //LED2 einschalten
AbsDelay(1000); //Warten 1 Sek

} //Alles was zwischen den beiden inneren
//Klammern ist, wird wiederholt!!
}


PortBit 16 (Port PC0) also LED1 ist das hintere Rechte LED beim ProBot
PortBit 17 (Port PC1) also LED2 ist das hintere Linke LED beim ProBot


Kanst sie direckt auf den ProBot laden, sie (solten) funktionieren!
Bei meinem jedenfals gehen sie;)

Mfg
HDR

P.s
sorry für die 2h verspätung, aber ich hatte noch nie zuvor mit C einen uc programmiert!
Aber wie gesagt..es funktioniert!

Ich muss noch kurz was (richtiges) arbeiten, dann kann ich dir auch das Prog mit dem schalter machen..

nici
27.04.2010, 19:44
sowas ist gut da sieht man mal duch und damit kann man was anfangen .!
jetzt noch eingang und dann kann man schon mal was machen .

Naturp
28.04.2010, 14:16
So..

also hier ist ein Programm, dass die LEDs beim ProBot der Reihe nach aufleuchten läst solange PA7 auf GND ist..

Wird PA7 von GND getrent, geht das Licht zwischen dem letzten und dem nächsten LED hin und her, bis PA7 wieder mit GND verbunden ist..

Das kanst du mit einem z.B Taster machen..

Hoffe, das das Programm verständlich ist..


//Lauflicht und 1 Taster für Pro Bot

#define LED1 16
#define LED2 17
#define LED3 19
#define LED4 18

#define Taster1 7

#define OFF 1
#define ON 0
#define IN 0
#define OUT 1



void main(void)
{
Port_DataDirBit(LED1,OUT); //Auf Ausgang schalten
Port_DataDirBit(LED2,OUT);
Port_DataDirBit(LED3,OUT);
Port_DataDirBit(LED4,OUT);

Port_DataDirBit(Taster1,IN); //Auf Eingang Schalten

Port_WriteBit(LED1,OFF); //Alle LED OFF
Port_WriteBit(LED1,OFF);
Port_WriteBit(LED1,OFF);
Port_WriteBit(LED1,OFF);

Port_WriteBit(Taster1,1); //Pull UP Wiederstand einschalten

byte Status;

Status = 1;

while(true)
{
if (Status == 1) //ist der Status ==1
{
Port_WriteBit(LED2,OFF);
Port_WriteBit(LED1,ON);
AbsDelay(400);
Port_WriteBit(LED1,OFF);
Port_WriteBit(LED2,ON);
AbsDelay(400);

if(Port_ReadBit(Taster1)==0) //Wird der Taster gedrückt??
{
Port_WriteBit(LED2,OFF); //Wenn ja: LED2,OFF und
Status = 2; //Status Wechsel
}
}

if (Status==2) //Ist der Status == 2
{
Port_WriteBit(LED3,OFF);
Port_WriteBit(LED2,ON);
AbsDelay(400);
Port_WriteBit(LED2,OFF);
Port_WriteBit(LED3,ON);
AbsDelay(400);

if(Port_ReadBit(Taster1)==0) //Wird der Taster gedrückt??
{
Port_WriteBit(LED3,OFF); //Wenn ja: LED3,OFF und
Status = 3; //Status Wechsel
}
}

if (Status == 3) //ist der Status == 3
{
Port_WriteBit(LED4,OFF);
Port_WriteBit(LED3,ON);
AbsDelay(400);
Port_WriteBit(LED3,OFF);
Port_WriteBit(LED4,ON);
AbsDelay(400);

if(Port_ReadBit(Taster1)==0) //Wird der Taster gedrückt??
{
Port_WriteBit(LED4,OFF); //Wenn ja: LED4,OFF und
Status = 4; //Status Wechsel
}
}
if (Status == 4) //Ist der Status == 4
{
Port_WriteBit(LED1,OFF);
Port_WriteBit(LED4,ON);
AbsDelay(400);
Port_WriteBit(LED4,OFF);
Port_WriteBit(LED1,ON);
AbsDelay(400);

if(Port_ReadBit(Taster1)==0) //Wird der Taster gedrückt??
{
Port_WriteBit(LED1,OFF); //Wenn ja: LED1,OFF und
Status = 1; //Status Wechsel
}
}
}
}

Ich bin wie gesagt C anfänger..(noch nie zuvor C auf uc programiert) fals ein fehler im Programm ist, bitte melden!

Es funktioniert aber;)
Viel Spass und freundliche Grüsse
HD

nici
29.04.2010, 20:11
danke danke danke das hilft mir sehr jetzt kann ich etwas rumspielen .!

kcrx
03.05.2010, 22:45
Hi nici,

coole Idee mit dem Bagger!!!

Mir haben die Original-Conrad Beispiele (http://www.c-control.de/c-robotics/zubehor_ccrp5/zubehor_ccrp5.html) am Anfang gut geholfen.

Auch die Port-Tabelle im Anhang ist ganz praktisch. (Gut versteckt auf der C-Control Seite)

Bin mal gespannt auf den Pro-Bagger...

Gruß

Frank