Counter: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(Code)
 
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<br>
+
Dieses Beispiel zeigt, wie man einen '''Impulszähler''' mittels eines [[Control6]]-Skripts erstellen kann. Der Signaleingang ist am INT0-Pin.
=== Impuls Counter mittels Control6 Script ===
+
 
<br>
+
==Abfrage==
Signal eingang am INT0 pin<br>
+
Counter-Abfrage mittels ECMD über TCP:
Counter Abfrage mittels ECMD:<br>
+
gummi:~# echo "c6 get pc_counter" | socat stdio tcp4:10.0.0.40:2701
<br>
+
pc_counter 98
gummi:~# echo "c6 get pc_counter" | socat stdio tcp4:10.0.0.40:2701<br>
+
oder mittels ECMD und Webbrowser:
pc_counter 98<br>
+
http://10.0.0.40/ecmd?c6+get+pc_counter
<br>
+
(liefert "pc_counter 98" im Browser).
<br>
+
 
<br>
+
Siehe auch [[ECMD Protocols]].
<source lang="text">
+
 
 +
==Code==
 +
Code für die src-Datei:
 +
<source lang="c">
 
CONTROL_START
 
CONTROL_START
 
         ECMD_GLOBAL(pc_counter, 0);
 
         ECMD_GLOBAL(pc_counter, 0);
 
         ON STARTUP DO
 
         ON STARTUP DO
  
                 // Pullup Wiederstaende Aktivieren
+
                 // Pullup-Widerstaende aktivieren
                 PORTD |= _BV(PORTD2);                   // ATMEGA64
+
                 PORTD |= _BV(PORTD2); // activate pullup on D2
                // PORTD(PORTD2) = 0
+
                 DDRD &= ~_BV(DDD2);   // set D2 to input
                 DDRD |= _BV(DDD2);                      // ATMEGA64
+
                // DDRD(DDD2) = 0
+
                 _EIMSK |= _BV(INT0); // external interrupt request 0 enable
                PIND &= ~_BV(PIND2);                   // ATMEGA64
+
                 _EICRA |= _BV(ISC01); // the falling edge of INT0 generates an interrupt request.
                // PIND(PIND2) = 1
 
 
 
                 //      GICR |= _BV(INT0);             // ATMEGA32
 
                 //      MCUCR |= _BV(ISC01);           // ATMEGA32
 
                EIMSK |= _BV(PCINT0);          // ATMEGA644
 
                EICRA |= _BV(ISC01);            // ATMEGA644
 
 
         END
 
         END
 
CONTROL_END
 
CONTROL_END
Zeile 35: Zeile 32:
 
}
 
}
 
</source>
 
</source>
 +
 +
 +
Wichtig zu wissen:
 +
int0 und int1 sind external interrupts, das bedeutet du bekommst den oben stehenden code nicht mir anderen ports zum laufen.
 +
Siehe https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328
 +
 +
==Siehe auch==
 +
*[[Benutzer:Biff|Erfahrungsbericht]]
  
 
[[Category:Control6 Examples]]
 
[[Category:Control6 Examples]]

Aktuelle Version vom 20. Mai 2014, 13:41 Uhr

Dieses Beispiel zeigt, wie man einen Impulszähler mittels eines Control6-Skripts erstellen kann. Der Signaleingang ist am INT0-Pin.

Abfrage

Counter-Abfrage mittels ECMD über TCP:

gummi:~# echo "c6 get pc_counter" | socat stdio tcp4:10.0.0.40:2701
pc_counter 98

oder mittels ECMD und Webbrowser:

http://10.0.0.40/ecmd?c6+get+pc_counter

(liefert "pc_counter 98" im Browser).

Siehe auch ECMD Protocols.

Code

Code für die src-Datei:

CONTROL_START
        ECMD_GLOBAL(pc_counter, 0);
        ON STARTUP DO

                // Pullup-Widerstaende aktivieren
                PORTD |= _BV(PORTD2); // activate pullup on D2
                DDRD &= ~_BV(DDD2);    // set D2 to input
 
                _EIMSK |= _BV(INT0);  // external interrupt request 0 enable
                _EICRA |= _BV(ISC01); // the falling edge of INT0 generates an interrupt request.
        END
CONTROL_END

ISR(INT0_vect)
{
        pc_counter ++;
}


Wichtig zu wissen: int0 und int1 sind external interrupts, das bedeutet du bekommst den oben stehenden code nicht mir anderen ports zum laufen. Siehe https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328

Siehe auch