-         

Ergebnis 1 bis 7 von 7

Thema: Code Erklärung der Erweiterungsplatine "Minesweeper"

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2012
    Beiträge
    8

    Code Erklärung der Erweiterungsplatine "Minesweeper"

    Anzeige

    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/pmwik...in/MineSweeper


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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108
    Hallo Martin
    Zitat Zitat von Phenix Beitrag anzeigen
    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

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    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.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo


    (Schaltplan aus der Anleitung: http://www.conrad.de/ce/de/product/1...load-dokumente)

    Links um OC2 die Ladungspumpe zur Erzeugung der +- Spannung für den OP (http://de.wikipedia.org/wiki/Ladungs...angsspannungen), 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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken minesweeper.jpg  

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2012
    Beiträge
    8
    Dankeschön erstmal

    Zitat Zitat von Thorben W Beitrag anzeigen

    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?

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2012
    Beiträge
    8
    Zitat Zitat von Valen Beitrag anzeigen

    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?

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von Phenix Beitrag anzeigen
    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.

    Zitat Zitat von Phenix Beitrag anzeigen
    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/Di..._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.
    Geändert von Valen (16.10.2012 um 00:46 Uhr)

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 16.08.2012, 12:05
  2. Wie kann ich ein "code snippet" für AVR-Studio erstellen?
    Von Boomi** im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.05.2012, 11:30
  3. NIBO2 - IR-Sendefkt nicht korrekt - "copro_TransmitRC5(uint16_t code)"
    Von Hero_123 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 5
    Letzter Beitrag: 12.03.2012, 09:24
  4. [ERLEDIGT] Erklärung für "Offset" gesucht
    Von HM im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 30
    Letzter Beitrag: 22.07.2011, 13:37
  5. "gicr" wird im inline-code für den 644p nicht erka
    Von funkheld im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 08.02.2011, 19:15

Stichworte

Berechtigungen

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