PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierung der 3 Erweiterungsplatinen des ASURO



ETA10
08.12.2009, 21:09
Hallo alle zusammen,

Ich finde es gut das so viele leute ihre unterstützung bieten und aus diesem Grund wollte ich jetzt auch mal was fragen.
Um es vorweg zu sagen ich habe keine wirkliche ahnung vom Programmieren. Ich kenne mich mit Schaltungen aus aber mit Programmierung habe ich nicht viel zu tun. So, nun mein anliegen. Ich muss bis übermorgen ein Programm für alle drei erweiterungsplatinen des ASURO fertig gestellt haben. Mein Lehrer hat mir die beiden ASURO bücher gegeben, damit ich mir die Programmer raus schreiben kann.
Ich habe jetzt die frage ob ihr vielleicht wisst, wie ich die 3 Programme der Erweiterungsplatine zu einem Programm zusammenfassen kann damit es auch läuft? Die Platine dazu ist schon fertig gestellt doch von der Programmierung und der Port belegung habbe ich nicht so viel ahnung.
Es geht um den Ultraschallsensor, das LC-Display und die Snake-Vision.

Ultrschall

#inlude "asuro.h"
void LocalInit(void)
{
TCCR2=(1<<WGM21) | (1<<CS20);
OCR2=0x64;
ADCSRA=0x00;
ACSR=0x02;
ADMUX=0x03;

SFIOR|=(1<<ACME);
DDRD&=~(1<<6);
}

void Ping (unsigned char length)

{
count 72kHz=0;
TCCR2 = (1<<WGM21) | (1<<COM20) | (1<<CS20);
while (count72kHz<length)
{
OCR2=ox64+length/2-count72kHz;
}
TCCR2 = (1<<WGM21) | (1<<CS20);
OCR2=0x64;
}

int main (void)
{
int pos,i;
int posmarker;
Init();
LocalInit();
while(1)
{
posmarker=0;
Ping(20);
for (pos=0; pos<100; pos++)
{
Sleep(10);
if ((ACSR&(1<<ACI))!=0)
{
if (posmarker==0) {posmarker=pos;}
}
ACSR|=(1<<ACI);
}
if (posmarker>10)
{
StatusLED(Green);
MotorDir(FWD,FWD);
MotorSpeed(100,100);
}
else
{
StatusLED(RED);
MotorDir(FWD,RWD);
MotorSpeed(0,100);
for (i=0; i<100; i++) {Sleep(200);}
}
}
return 0;
}






LCD

#include "asuro.h"
#include "lcd.h"
int main(void)
{
Init();
lcd_init(LCD_DISP_ON_CURSOR_BLINK);

lcd_puts("HALLO AE31")

for (;;)
{
if (LCD_KEY_BLUE) {
lcd_clrscr();
lcd_puts_P("Dimi");
while(LCD_KEY_BLUE);
}
if (LCD_KEY_YELLOW) {
lcd_clrscr();
lcd_puts_P("Kuhn");
while(LCD_KEY_YELLOW);
}
if (LCD_KEY_RED) {
lcd_clrscr();
lcd_puts_P("Motchi");
while(LCD_KEY_RED);
}
}
return 0;
}




Snake-Vision

#include "asuro.h"
#define THRESH1 20
#define THRESH1 80
#define THRESH1 200

void Thermaldata(unsigned int *data)
{
ADMUX=(1<<REFS0) | (1<<REFS1) | IR_LEFT;
ADCSRA |= (1<<ADSC);
while (!(ADCSRA & (1<<ADIF)));
ADCSRA |= (1<<ADIF);
data[0] = ADCL + (ADCH<<8);
ADMUX = (1<<REFS0) | (1<<REFS1) | IR_RIGHT;
ADCSRA |= (1<<ADSC);
while (!(ADCSRA & (1<<ADIF)));
ADCSRA |= (1<<ADIF);
data[1]= ADCL + (ADCH<<8);
}

int main (void)
{
unsigned int tdata[2];
unsigned int sped;
signed int diff, sum;
Init();
MotorDir(FWD,FWD);
while(1)
{
ThermalData(tdata);
sum=tdata[0]+tdata[1];
if (sum>TRESH1) {
StatusLED(GREEN);
Speed=100;
if (sum>TRESH1) {
StatusLED(YELLOW);
Speed=120;
}
if (sum>TRESH1) {
StatusLED(RED);
Speed=140;
}
diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
if (diff>4)
{
BackLED(ON,OFF);
MotorSpeed(0,speed);
}
else if (diff<-4)
{
BackLED(OFF,ON);
MotorSpeed(speed,0);
}
else
{
BackLED(OFF,OFF);
MotorSpeed(speed,speed);
}
}
return 0;
}




So, das sind die 3 Programme aus den 2 Büchern mehr Spass mit ASURO 1 und 2.
Es wäre toll, wenn ihr mir mit dem Programm weiter helfen könntet.
Ein grosses danke schonmal im Vorraus.

Thund3r
08.12.2009, 21:57
Hallo

Was soll denn dieses "eine Programm" machen können bzw wie sollen die Sensoren für was eingesetzt werden?

Gruß Thund3r

ETA10
08.12.2009, 23:05
Hallo Thund3r,

also es soll einfach alles kombiniert werden damit ich alles gleichzeitig betreiben kann. das soll heissen, dass der Ultraschallsensor ein signal sendet und empfängt und notfalls ausweicht oder die Snake-Vision bei der empfindung von wärme ausweicht und das LC-Display soll einfach nur einen kleinen text anzeigen. z.b. hallo ich bin ASURO. kannst du mir da vielleicht bzw. könnt ihr mir da weiterhelfen ?

Thund3r
08.12.2009, 23:29
Hallo

Es wäre meiner Meinung nach wesentlich schlauer 3 unabhängige Programme zu nehmen um alle Funktionen seperat vorzuführen.

Ein Kombinationsprogramm wo LCD Panel, Wärmesensor und Ultraschall messung eingesetzt werden erscheint mir nicht ideal und recht komplex.

Als 3te Alternative könnte man ein Programm schreiben was zB auf Tastendruck (Kollisions Sensoren) von einer Funktion auf die andere umschaltet.
Andererseits Frage ich mich immer noch über die Umsetzung da man jede der Modifikationen meines Wissens nach an die Liniensensorik anschließt also kann man ohne weiteres nicth alle drei auf einmal anschließen.

Gruß Thund3r

ETA10
09.12.2009, 07:58
normalerweise geht das auch nicht alle 3 erweiterungsplatinen auf einmal zu betreiben doch ich habe eine platine angefertigt, mit der man 3 platinen auf dem ASURO anschliessen kann, deswegen wolllte ich auch alle 3 gleichzeitig betreiben, aber wenn du sagst, dass es nicht funktioniert dann kann man wohl nichts machen.
Du sagst also, dass ich ich 3 seperate programme also so wie ich sie da oben rein gestellt habe benutzen soll und es nicht möglich bzw. zu komplex ist, 3 programme zu einem zu kombinieren damit alles gleichzeitig läuft.

Thund3r
09.12.2009, 13:57
Hallo

Also ich halte es weiterhin für sehr schwierig bis ncith möglich alle 3 erweiterungen parallel laufen zu lassen. Und am besten wäre ein Programm pro Erweiterung. Dann wechselst du die Erweiterung flasht das neue Programm und führst dies dann vor

Gruß Thund3r

Valen
10.12.2009, 23:54
Wie arbeitet dein 3-fach platine denn? Die drei experimentier platinen einfach im parallel kreis an dem 'freien' pins schalten geht nicht. Irgend wie mus das program oder den elektronik die entscheidung machen können von welche platine die signalen ab kommen. Zbs. einer seite der pyrosensors (links oder rechts, weiss nicht genau) und das ultraschal signal gehen beide am ADC2 pin. Wie macht er die entscheidung welcher platine das her kommt?

Oder, die beide ADC pins (2,3) werden auch benutzt beim senden von daten zum LCD controller. Ein zufallig eingetretendes ultraschall signal könnte dein I2C signalen (zum PCF 8574 chip) beinflussen.

Ich bin wirklich neugierig wie du das geschaft hast.