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

(erklärung zeitmessung und synchronisation)
 
(21 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
 
Ich bin in diesem Teil des Forums absolut unerfahren und traue mir (noch) nicht zu es selbst zu erledigen.
 
Ich bin in diesem Teil des Forums absolut unerfahren und traue mir (noch) nicht zu es selbst zu erledigen.
  
== erklärung zeitmessung und synchronisation ==
+
= erklärung zeitmessung und synchronisation =
  
 
versuche gerade den abgebildeten code zu verstehen - irgendwie fehlen mir die punkte zeitmessung/synchronisation im code.
 
versuche gerade den abgebildeten code zu verstehen - irgendwie fehlen mir die punkte zeitmessung/synchronisation im code.
Zeile 9: Zeile 9:
  
 
handelt es sich bei dem hier vorgestelltem code wirklich um einen voll lauffähigen code ?
 
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 <tt>tcnt0</tt> 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.
 +
 +
--[[Benutzer:SprinterSB|SprinterSB]] 16:54, 24. Aug 2006 (CEST)
 +
 +
---
 +
 +
ok super - dann wird schon einiges klarer ;)
 +
 +
was mich noch irritiert ist die anweisung in der ISR
 +
 +
==rc5.c==
 +
uint8_t _nint = nint;
 +
       
 +
if (0 == _nint) {
 +
  #if (RC5_INT == RC5_INT0)             
 +
      MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
 +
  #elif (RC5_INT == RC5_INT1)           
 +
      MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
 +
  #endif
 +
...
 +
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 ?
 +
 +
==rc5.c==
 +
if (0 == _nint) {
 +
  #if (RC5_INT == RC5_INT0)             
 +
      MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
 +
  #elif (RC5_INT == RC5_INT1)           
 +
      MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
 +
  #endif
 +
}
 +
 +
danke
 +
 +
---
 +
 +
In der Formatierung durch die Wiki-Tags gab es einen Fehler, dadurch war die Quelle ziemlich zerbröselt und einiges wurde in der Anzeige verschluckt (u.a. die falsche Klammerung). Ich hab es jetzt korrigiert, das ganze sieht jetzt ''etwas'' anders aus. Ich hoffe jetzt wird's klarer. Danke nochmal für dein aufmerksames Durchlesen! --[[Benutzer:SprinterSB|SprinterSB]] 09:36, 25. Aug 2006 (CEST)
 +
 +
---
 +
 +
np ich sage danke für den tollen artikel ;)
 +
 +
---
 +
Vielleicht bekommst du es ja zum Laufen, wäre schön mal ne Rückmeldung zu haben, ob überhaupt jemand was mit solchen Artikeln anfangen kann... oder ob sie nur brav zustauben ;-) --[[Benutzer:SprinterSB|SprinterSB]] 14:49, 25. Aug 2006 (CEST)
 +
 +
---
 +
 +
Ich probier's gerade mit einem TSOP 1136. muss man den externen pull up haben ? geht nicht der interne vom Atmega ? Noch gelingt es mir nicht Codes zu empfangen. entweder ich bekomme eine 0 als Ergebnis - egal welche Taste, oder das Programm springt nach "invalid:"
 +
Ich teste mit 2 universal-Fernbedienungen, in der Hoffnung dass bei den 5 + 8 Geräten auch eins mit RC5 dabei ist.
 +
--[[Benutzer:Mherweg|Mherweg]] 21.12.2008
 +
 +
---
 +
 +
Ich hätte nochmal eine Frage wegen der zeitmessung und synchronisation. Könnte mir jemand sagen um welche Zeilen ich den Quellcode erweitern muss? Ich blick da noch nicht ganz durch, bitte um Hilfe Also den Quellcode für start einer zeitmessung bei flankenwechsel (=synchronisation), rücksetzen des timer-counters bevor überlauf sagen. Vielen Dank schon im Vorraus
 +
--[[Benutzer:Pinky|Pinky]] 23.04.2009
 +
 +
--
 +
 +
== Änderungen im struct rc5_t ==
 +
 +
Hallo zusammen,
 +
 +
zunächst danke für den tollen Artikel, allerdings hatte ich doch ein Problem damit das ganze zum laufen zu bekommen.
 +
 +
Am Anfang änderte mir die ISR zwar rc5.flip auf einen Wert >= 0, was in meiner Hauptschleife auch erkannt wurde, jedoch blieb rc5.code und rc5.addr bei 9 von 10 gesendeten Tasten keinen Wert, bzw. den Wert 0.
 +
 +
Das Problem daran war das im Struct rc5_t nur die variable flip volatile deklariert war, was ich zunächst übersehen hatte.
 +
Nachdem ich nun code und addr auch volatile gesetzt habe, sind nun auch dort die korrekten Werte vorhanden.
 +
 +
typedef struct
 +
{
 +
volatile uint8_t code;
 +
volatile uint8_t addr;
 +
volatile signed char flip;
 +
} rc5_t;

Aktuelle Version vom 26. Oktober 2009, 17:49 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

rc5.c

uint8_t _nint = nint;
       
if (0 == _nint) {
  #if (RC5_INT == RC5_INT0)               
     MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
  #elif (RC5_INT == RC5_INT1)             
     MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
  #endif
...
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 ?

rc5.c

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

danke

---

In der Formatierung durch die Wiki-Tags gab es einen Fehler, dadurch war die Quelle ziemlich zerbröselt und einiges wurde in der Anzeige verschluckt (u.a. die falsche Klammerung). Ich hab es jetzt korrigiert, das ganze sieht jetzt etwas anders aus. Ich hoffe jetzt wird's klarer. Danke nochmal für dein aufmerksames Durchlesen! --SprinterSB 09:36, 25. Aug 2006 (CEST)

---

np ich sage danke für den tollen artikel ;)

--- Vielleicht bekommst du es ja zum Laufen, wäre schön mal ne Rückmeldung zu haben, ob überhaupt jemand was mit solchen Artikeln anfangen kann... oder ob sie nur brav zustauben ;-) --SprinterSB 14:49, 25. Aug 2006 (CEST)

---

Ich probier's gerade mit einem TSOP 1136. muss man den externen pull up haben ? geht nicht der interne vom Atmega ? Noch gelingt es mir nicht Codes zu empfangen. entweder ich bekomme eine 0 als Ergebnis - egal welche Taste, oder das Programm springt nach "invalid:" Ich teste mit 2 universal-Fernbedienungen, in der Hoffnung dass bei den 5 + 8 Geräten auch eins mit RC5 dabei ist. --Mherweg 21.12.2008

---

Ich hätte nochmal eine Frage wegen der zeitmessung und synchronisation. Könnte mir jemand sagen um welche Zeilen ich den Quellcode erweitern muss? Ich blick da noch nicht ganz durch, bitte um Hilfe Also den Quellcode für start einer zeitmessung bei flankenwechsel (=synchronisation), rücksetzen des timer-counters bevor überlauf sagen. Vielen Dank schon im Vorraus --Pinky 23.04.2009

--

Änderungen im struct rc5_t

Hallo zusammen,

zunächst danke für den tollen Artikel, allerdings hatte ich doch ein Problem damit das ganze zum laufen zu bekommen.

Am Anfang änderte mir die ISR zwar rc5.flip auf einen Wert >= 0, was in meiner Hauptschleife auch erkannt wurde, jedoch blieb rc5.code und rc5.addr bei 9 von 10 gesendeten Tasten keinen Wert, bzw. den Wert 0.

Das Problem daran war das im Struct rc5_t nur die variable flip volatile deklariert war, was ich zunächst übersehen hatte. Nachdem ich nun code und addr auch volatile gesetzt habe, sind nun auch dort die korrekten Werte vorhanden.

typedef struct
{
	volatile uint8_t code;
	volatile uint8_t addr;
	volatile signed char flip;
} rc5_t;

LiFePO4 Speicher Test