PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Code Erklärung der Erweiterungsplatine "Minesweeper"



Phenix
10.10.2012, 21:26
Hallo,
ich muss den Code für eine Arbeit verstehen, verstehe aber bestimme Zeilen nicht.
Kann mir wer helfen?
Das Programm ist dafür da, das die FrontLED leuchten soll, wenn Metall "gespürt" wird, dieses wir anhand der Erweiterungsplatine "Minesweeper" erreicht.



#include "asuro.h" // die Bibilothek "asuro.h" wird eingebunden
int main(void) // die Hauptfunktion wird aufgerufen

{
Init(); // Microcontroller wird in den Grundzustand versetzt
extern volatile unsigned char count72kHz; // wieso ausgerechnet count72kHz?

unsigned char oscillation; // die Variable "oscillation" wird deklariert
DDRD &= ~(1<<2); // Change Port D Pin 2 to input Wieso wird das gemacht und was ist DDRD
StatusLED(OFF);

while(1) // das nachfolgende Programm wird in Endlosschleife ausgeführt
{
count72kHz=0; //Wieso wird es auf count72kHzauf 0 gesetzt?
oscillation = FALSE;

while (count72kHz<100) { //Was geschieht hier?
if ((PIND & (1<<2)) == 0) oscillation = TRUE; // was bedeutet (PIND & (1<<2)) ?

if (oscillation) FrontLED(OFF); else FrontLED(ON); // FrontLED an, wenn Metall "gespürt" wird
}


Wiki:
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/MineSweeper


Also ich freu mich über jede Antwort,
die mich auch nur einen kleinen Schritt weiter bringt ;)
Dankeschön
Martin

Thorben W
11.10.2012, 17:00
Hallo Martin


unsigned char oscillation; // die Variable "oscillation" wird deklariert
DDRD &= ~(1<<2); // Change Port D Pin 2 to input Wieso wird das gemacht und was ist DDRD

Das Bedeutet das im Data Direction Register D Port 2 auf eingang gesetzt wird.

count72kHz=0; //Wieso wird es auf count72kHzauf 0 gesetzt?
oscillation = FALSE;

while (count72kHz<100) { //Was geschieht hier?
if ((PIND & (1<<2)) == 0) oscillation = TRUE; // was bedeutet (PIND & (1<<2)) ?

count72kHz wird auf Null gesetz damit im nächsten Schritt gefragt werden kann ob der count72kHz noch unter Hundert ist. Wenn ja, dann wird im Port Input Pin D geguckt ob Pin 2 Null ist. Dann wird gesagt das oscillation = TRUE.
Ich hoffe dir schon mal Helfen zu Können.
Thobe

Valen
12.10.2012, 00:10
Die Variabel count72kHz wirdt in die Asuro.c Bibliothek inkrementiert bei jeder Output Compare Interupt der Timer2. (Zbs. steht am anfang von Asuro.c im FirstTry ordner) Also soll das:

while (count72kHz<100)

wie ein art von Zeit Messung funktionieren. (EDIT: Die Funktion Sleep() funktioniert auch so ähnlich.)

Bis 100 mal die Timer Interrupt passiert ist, wird die Pin D2 (3e Pin von Port D) Eingang abgefragt:

(1<<2) heißt Bitwert 1 wird 2 mal nach Links geschoben. Das
ist Äquivalent an 1 Multiplizieren mit 4. Das 3e Bit einer Byte hat ein Bitwert von 4. Einfach bedeutet das 00000100 im Binair Zahlung.

Wieso dort nicht gleich die Nummer 4 verwendet wird ist mir auch ein Rätsel.

PIND & (00000100) heißt das Register mit die Zustand der Port D Pins wirdt ge-Und-et mit Binair 4. Dadurch bekommt man ein Byte wo nur das 3te bit entweder gesetzt ist, oder nicht. Alle andere Bits sind 0, weil sie ge-Und-et sind mit 0.


if (("PinD2_zustand") == 0) heißt das getestet wird ob PinD2 niedrig ist. Wobei dann angenommen wird das die Schwungkreise in Oszillation ist.

Ich habe keine Ahnung wie die Schaltung aus sieht. Deshalb kann ich das Letzte nicht weiter erklären.

radbruch
12.10.2012, 06:21
Hallo

https://www.roboternetz.de/community/attachment.php?attachmentid=23439
(Schaltplan aus der Anleitung: http://www.conrad.de/ce/de/product/191555/#download-dokumente)

Links um OC2 die Ladungspumpe zur Erzeugung der +- Spannung für den OP (http://de.wikipedia.org/wiki/Ladungspumpe#Negative_Ausgangsspannungen), in der Mitte der rückgekoppelte Verstärker um den Schwingkreis anzuregen und rechts der Vergleicher welcher den Ausgang des Schwingkreises prüft. D4 letztlich ersetzt die LinienLED.

Gruß

mic

Phenix
15.10.2012, 22:45
Dankeschön erstmal :)




Das Bedeutet das im Data Direction Register D Port 2 auf eingang gesetzt wird.

Thobe

Was genau ist das Data Direction Register D, also das Ein und Ausgaberegister?

Phenix
15.10.2012, 22:50
PIND & (00000100) heißt das Register mit die Zustand der Port D Pins wirdt ge-Und-et mit Binair 4. Dadurch bekommt man ein Byte wo nur das 3te bit entweder gesetzt ist, oder nicht. Alle andere Bits sind 0, weil sie ge-Und-et sind mit 0.

if (("PinD2_zustand") == 0) heißt das getestet wird ob PinD2 niedrig ist. Wobei dann angenommen wird das die Schwungkreise in Oszillation ist.




Was ist ein Pin und ein Port?

Was meinst du mit "ge-Und-et"?

D.h. da PinD2 ==0 ist dieser PinD2 niedrig und die Oszillation ist im Takt?

Valen
15.10.2012, 23:40
Was ist ein Pin und ein Port?Ein Pin ist einer der Metallische Beinchen an den Atmega8 Prozessor. Die meiste der Pins kann man nach Wunsch einstellen als Eingang oder Ausgang. Ein Port ist eine Sammlung von mehrere Pins. Meistens eine Sammlung von 8, wodurch sie einfach gesamt mit Byte-werten Angesprochen werden können. Das könnte aber auch weniger Pins pro Port sein. Zbs. Port C, wo Asuro 7 Pins hat, wo von nur 6 Analoge Eingängen. Die letzte Pin davon ist die Reset Pin, die imprinzip auch als Ein/Ausgang benutzt werden kann. Leider nicht im Asuro.


Dankeschön erstmal :)


Was genau ist das Data Direction Register D, also das Ein und Ausgaberegister?

Mit das DDR (Data Richtung Register) wählt man ob ein Pin als Eingang oder Ausgang funktioniert. Das wird erklärt auf Seite 52 der Atmega8 Datasheet/Anleitung. Wen die Bits in das DDR Register einer Port 1 sind ist die Spezifische Pin ein Ausgang. Sonnst ein Eingang.



Was meinst du mit "ge-Und-et"?

D.h. da PinD2 ==0 ist dieser PinD2 niedrig und die Oszillation ist im Takt?Bist du bekannt mit Logisch Redenieren? Boolesche Algebra?

0 UND 0 = 0,
1 UND 0 = 0,
0 UND 1 = 0,
1 UND 1 = 1

ODER ist:

0 ODER 0 = 0,
1 ODER 0 = 1,
0 ODER 1 = 1,
1 ODER 1 = 1

Schau das mal an:

http://www.rn-wissen.de/index.php/Digitaltechnik_take_it_easy_Part1

In dein Code wird jeder Einzelne Bit im PIND Register (Zustand von Port D) mit das Bit an den gleiche Stelle der Wert 00000100 laut den "Und" Definition Berechnet. Das Antwort ist ein Nummer das gleich 0 ist, oder gleich 4 ist. Gleich 0 meint das PinD2 niedrich ist, oder 0 volt. Gleich 4 meint das PinD2 hoch ist, und in die nähe von 5 volt.

Was das genau bedeutet in die Schaltung kann ich leider nicht gut erklären. Ich kenne mich nicht so gut mit Schwingkreisen aus, oder mit diesen Operations Verstarker Aufbau. Einer die 2 Zustanden ist die Detektion von Metall Teilen. ;)