PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schulprojekt: Hochregallager



facile
05.12.2008, 19:05
Hi,

hab mal wieder eine Frage die aber nur gering mit Robotik zu tun hat ;)
Wir sind grad dabei (kleine Gruppe) in der Schule ein 1m x 1m Modell-HRL zu programmieren.

Funktioniert auch alles soweit allerdings gibts Probleme mit der Sensorik. Irgendwie bekommen wir keine Ergebnisse von 2 Lichtsensoren am Anfang und Ende des Fliesbands (Einlagerung bis zum "Kran").

Also mal kurz eine Frage da ich auf dem Schlauch stehe:

damit ich an die Sensoren kommen muss ich dem µC erst sagen zu welchem µC ich will (insgesamt 4 hinter dem µC an dem Motoren, Sensoren etc angschlossen sind.) Das mache ich dann mit:



/* Strobe auf High */
PORTB |= (1<<PB1);
/* Adresse auf Datenport */
PORTA = 4;
/* Init mit Delay zur Uebernahme */
PORTA |=(1<<PA0);
_delay_us(10);
PORTA &= ~(1<<PA0);
/* Richtungsregister setzen */
DDRA = 0x00;
/* Strobe wieder auf low */
PORTB &= ~(1<<PB1);
/* und jetzt die eigentliche Frage */
if(PINA & 0x01) xyz=128; //<<< Geht das? ;)


Funktioniert die Abfrage am Ende so?

Denke alzu viel kann man mit dem Code nicht anfagen aber das kompl. Programm wäre noch undurchschaubarer da es nicht kommentiert ist ;)

Danke im Vorraus

error41
05.12.2008, 19:46
if(PINA & 0x01) xyz=128; //<<< Geht das? ;)


Funktioniert die Abfrage am Ende so?


Hi!
Also die Abfrage funktioniert, ich weis nur nicht ob das das ist was du programmieren wolltest. :-)

Wenn am PA0 ein High-Pegel anliegt wird der Variable xyz der Wert 128 zugewiesen.
Soll das denn auch passieren?
Falls immer nur ein High-Pegel gemessen wird: Sind die Pull-ups aktiv?

Gruß

zerush
06.12.2008, 01:29
Falls immer nur ein High-Pegel gemessen wird: Sind die Pull-ups aktiv?




PORTA &= ~(1<<PA0);


Dadurch sollte der entsprechende Pull-Up nicht gesetzt sein, wenn das DDR auf Input steht.

Ist denn auch gewährleistet, dass direkt nachdem Strobe auf Low gesetzt wird, am PinA der gewünschte Wert anliegt?

facile
06.12.2008, 01:41
Also am Fliesband sind jeweils hinten und vorne 2 Lichtschranken + Reflektoren. Stellt sich natuerlich die Frage ob die wenn nichts den Messbereich durchquert High oder Low sind. Testen kann ich es leider im Moment nicht. Aber ihr wisst sowas ja ;)

Also ich will überprüfen ob ein Gegenstand in diesem Fall eine Mini Palette + "Karton" die Lichtschranke durchquert. Dann soll diese erst einmal stoppen und einen Richtungswechsel vornehmen. Daher auch die beiden Werte 128 und 64. Wenn die Platte wieder am anderen Ende ankommt eben das gleiche Spiel nur andersrum ..

Ich muss sagen die Frage ist mir schon fast peinlich aber nach 3h probieren hab ich es aufgegeben da egal was ich versucht habe alles gescheitert ist b.z.w sogar Dinge hervorgebracht hat die wirklich unbeabsichtigt waren (z.B hat sich der Taktmotor der z achse (einlagern) bewegt, obwohl ich diesem garkeinen Takt gegeben habe.)

Also richte ich mich in voller Hoffnung an euch :)

error41
06.12.2008, 21:34
Also am Fliesband sind jeweils hinten und vorne 2 Lichtschranken + Reflektoren. Stellt sich natuerlich die Frage ob die wenn nichts den Messbereich durchquert High oder Low sind. Testen kann ich es leider im Moment nicht.

Hi!
Habt ihr in der Schule kein Multimeter um mal zu checken ob die Lichtschranken auch das machen was sie sollen?
Also ob sie auf eine Unterbrechung des Lichtstrahls reagieren, ob überhaupt ein Signal herauskommt, und ob der High-Pegel (Ich tippe mal auf 5V?) stimmt.

Haben die Lichtschranken seperate Massen, und wenn ja sind die miteinander verbunden? (Ohne Massepotential kann der ATmega ja nichts messen)

Habt ihr die Eingänge des Atmega ggf. mal auf High oder Low gesetzt ob dieser diese auch misst? (Also ohne die Lichtschranke)

Welchen Atmega verwendet ihr? Hat dieser am Port A zufällig analoge Eingänge? Wenn ja dann müsst ihr diese umstellen um sie als digitale Ein-/Ausgänge nutzen zu können.

Ich hoffe mal einer dieser Denkanstöße hilft euch weiter... :)
Viel Erfolg!

Gruß

facile
06.12.2008, 22:37
Super danke für die vielen Tipps werde es am Montag mal durchprüfen gebe dann nochmal ein Statusbericht ;)