Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
LiFePO4 Speicher Test

Zeile 29: Zeile 29:
  
 
ok super - dann wird schon einiges klarer ;)
 
ok super - dann wird schon einiges klarer ;)
 +
 
was mich noch irritiert ist die anweisung in der ISR
 
was mich noch irritiert ist die anweisung in der ISR
  
 
<nowiki>
 
<nowiki>
        uint8_t _nint = nint;
+
 
 +
uint8_t _nint = nint;
 +
 
 
...         
 
...         
        if (0 == _nint)
+
if (0 == _nint)
        {
+
 
 +
{
 +
 
 
                 /* INTx on both edges */
 
                 /* INTx on both edges */
 +
 
#if (RC5_INT == RC5_INT0)               
 
#if (RC5_INT == RC5_INT0)               
 +
 
                 MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
 
                 MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
 +
 
#elif (RC5_INT == RC5_INT1)             
 
#elif (RC5_INT == RC5_INT1)             
 +
 
                 MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
 
                 MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
 +
 
#endif /* Number of bits of the just elapsed period; */
 
#endif /* Number of bits of the just elapsed period; */
 +
 
...
 
...
 +
 +
  
 
und
 
und
 +
 
...
 
...
 +
 
nint = _nint+1
 
nint = _nint+1
 +
 +
  
 
</nowiki>
 
</nowiki>
 +
 +
  
 
hier würden dann ja nur die ersten 1/2 ticks verarbeitet werden, da ja sonst die abfrage _nint>0 ergibt...
 
hier würden dann ja nur die ersten 1/2 ticks verarbeitet werden, da ja sonst die abfrage _nint>0 ergibt...
 +
 +
  
 
oder ist hier vielleicht ur eine klammer falsche gesetzt ?
 
oder ist hier vielleicht ur eine klammer falsche gesetzt ?
 +
 +
  
 
<nowiki>
 
<nowiki>
 +
 
  if (0 == _nint)
 
  if (0 == _nint)
 +
 
         {
 
         {
 +
 
                 /* INTx on both edges */
 
                 /* INTx on both edges */
 +
 
#if (RC5_INT == RC5_INT0)               
 
#if (RC5_INT == RC5_INT0)               
 +
 
                 MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
 
                 MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
 +
 
#elif (RC5_INT == RC5_INT1)             
 
#elif (RC5_INT == RC5_INT1)             
 +
 
                 MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
 
                 MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
 +
 
#endif
 
#endif
 +
 
}
 
}
 +
 
</nowiki>
 
</nowiki>
 +
 
danke
 
danke

Version vom 24. August 2006, 16:17 Uhr

Ob es machbar wäre den Schaltplan um die Siebbauteile am TSOP zu erweitern, oder quasi als empfohlene Variante zusätzlich dazuzusetzen? Das erleichtert dem TSOP die Funktion auch in gestörter Umgebung und erlaubt damit deutlich höhere Reichweiten.

Ich bin in diesem Teil des Forums absolut unerfahren und traue mir (noch) nicht zu es selbst zu erledigen.

erklärung zeitmessung und synchronisation

versuche gerade den abgebildeten code zu verstehen - irgendwie fehlen mir die punkte zeitmessung/synchronisation im code. d.h. start einer zeitmessung bei flankenwechsel (=synchronisation), rücksetzen des timer-counters bevor überlauf

handelt es sich bei dem hier vorgestelltem code wirklich um einen voll lauffähigen code ?

---

Hi, danke für den Hinweis. Da sind wohl 2 Zeilen beim Bearbeiten oder so verschütt gegangen (die Deklaration von tcnt0 et.al. in der INTx-ISR)

Die Software verwende ich in vielen Projekten (oft auch einfach als Tasterersatz, braucht ja nur ein Port), auch zusammen mit anderen aktivierten IRQs (UART, SPI, Timer, INT), idR auf drei Prioritätsebenen:

0: normale Applikationseben

1: Interupt: (unterbrechbare ISRs)

2: Signal: (nichtunterbrechbare ISRs)

Das RC5-Zeug läuft bei mir auf Ebene 2.

--SprinterSB 16:54, 24. Aug 2006 (CEST)

---

ok super - dann wird schon einiges klarer ;)

was mich noch irritiert ist die anweisung in der ISR

uint8_t _nint = nint; ... if (0 == _nint) { /* INTx on both edges */ #if (RC5_INT == RC5_INT0) MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01); #elif (RC5_INT == RC5_INT1) MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11); #endif /* Number of bits of the just elapsed period; */ ... und ... nint = _nint+1


hier würden dann ja nur die ersten 1/2 ticks verarbeitet werden, da ja sonst die abfrage _nint>0 ergibt...


oder ist hier vielleicht ur eine klammer falsche gesetzt ?


if (0 == _nint) { /* INTx on both edges */ #if (RC5_INT == RC5_INT0) MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01); #elif (RC5_INT == RC5_INT1) MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11); #endif }

danke


LiFePO4 Speicher Test