TV-B-Gone(von adafruit) auf atmega32

Gast #4782990
Lesenswert?

Hey,

ich versuche gerade den TV-B-Gone nachzubauen. Allerdings funktioniert 
das bei mir nicht. Getestet habe ich bis jetzt zwei Fernseher von 
Herstellern, bei denen es laut Webseite funktionieren sollte.

Source-Code und Schaltplan
-> https://learn.adafruit.com/tv-b-gone-kit/download


Verwendeter uC: atmega32 16PU(16MHZ) (das "orginal" arbeitet mit 
ATTINY85V-10-PU, 8MHZ)

Schaltplan verändert:
Stromversorgung: 9V-Block-Batterie -> Spannungsregler(78S05)
Benutze nur eine IR-LED anstatt vier, die direkt am uC-Pin angeschlossen 
ist(anstatt über eine Transistor).

(OC0-PINB3)----Widerstand---IR-LED----VCC

Widerstand: 72 Ohm
IR-LED: 'oringal': Wellenlänge = 940nm
IR-LED: 'meine': SEP8705, Wellenlänge = 880nm(sollte laut 
Internet-Recherche nicht viel ausmachen), U: min:2,7V - max:7,8V; 
Imax=50mA
Wenn ich durch meine Kamera die IR-LED anschaue, sehe ich diese auch 
blinken.

Code verändert:
- EU-Code: hardcodiert (region = EU;)
- Die 'normale' LED weggelassen(sowohl im Code, als auch bei der 
Schaltung)
- delayfunktion geändert, da 16MHZ(anstatt 8MHZ wie im 
'orinalcode').("orginalcode" ist auskommeniert, und die delay-Funktion 
von gcc-avr benutzt). Leider habe ich kein Oszi um den Timer zu 
überprüfen.
1
void delay_ten_us(uint16_t us) 
2
{
3
  _delay_us(10.0 * us);
4
/*
5
  uint8_t timer;
6
  while (us != 0) {
7
    // for 8MHz we want to delay 80 cycles per 10 microseconds
8
    // this code is tweaked to give about that amount.
9
    for (timer = 0; timer <= DELAY_CNT; timer++) {
10
      NOP;
11
      NOP;
12
    }
13
    NOP;
14
    us--;
15
  }
16
*/
17
}


Ist bei den Änderungen die ich gemacht habe irgendwas falsch? Oder hatte 
ich einfach nur pech, dass es bei den Fernseher nicht funktioniert hat?
Gast #4783097
Lesenswert?

Hey, danke. Das mann die delay_us() Funktion nicht mit Variablen 
aufrufen sollte wusste ich noch nicht. Ich habe den Programmcode jetzt 
folgendermaßen geändert:
1
void delay_ten_us(uint16_t us) {
2
        uint16_t i;
3
  uint16_t timer = 10.0 * us;
4

5
  for( i = 0; i < timer; ++i )
6
  {
7
      _delay_us(1);
8
  }
9
}

Allerdings ist das Blinken der LEDs jetzt wesentlich langsamer als 
zuvor. Da muss ich wohl mit die delay-Funktion nochmals überprüfen.
Gast #4783100
Lesenswert?

Hey, danke. Das mann die delay_us() Funktion nicht mit Variablen 
aufrufen sollte wusste ich noch nicht. Ich habe den Programmcode jetzt 
folgendermaßen geändert:
1
void delay_ten_us(uint16_t us) {
2
        uint16_t i;
3

4
  for( i = 0; i < us; ++i )
5
  {
6
      _delay_us(10);
7
  }
8
}

Allerdings ist das Blinken der LEDs jetzt wesentlich langsamer als 
zuvor. Da muss ich wohl mit die delay-Funktion nochmals überprüfen.
Gast #4783147
Lesenswert?

Wenn man erst schreibt und dann nachdenkt kommt solch ein Dünnsinn bei 
raus.

Ich würde die original routine verwenden und mit den nop spielen.
Vermutlich müßten zwei zusätzliche, die höhere Frequenz kompensieren.

void delay_ten_us(uint16_t us)
{

  uint8_t timer;
  while (us != 0) {
    // for 8MHz we want to delay 80 cycles per 10 microseconds
    // this code is tweaked to give about that amount.
    for (timer = 0; timer <= DELAY_CNT; timer++) {
      NOP;
      NOP;
      NOP;
      NOP;
    }
    NOP;
    us--;
  }

}
Gast #4783155
Lesenswert?

Oder noch besser, wenn ich mir das Original ansehe:

#define DELAY_CNT 22


1
#define NOP __asm__ __volatile__ ("nop")
2
// This function delays the specified number of 10 microseconds
3
#define DELAY_CNT 11
4
void delay_ten_us(uint16_t us) {
5
  uint8_t timer;
6
  while (us != 0) {
7
    for (timer=0; timer <= DELAY_CNT; timer++) {
8
      NOP;
9
      NOP;
10
    }
11
    NOP;
12
    us--;
13
  }
14
}
Gast #4783167
Lesenswert?

Mit #define DELAY_CNT 22 habe ich es davor auch versucht, aber hat eben 
nicht wirklich geholfen.

Habe meine Fehler gefunden. Ich hatte die Taktfrequenz am AVR falsch 
gesetzt. Die war auf 1MHZ eingestellt anstatt auf 16MHz....

Funktionieren tut die ganze Schaltung leider immer noch nicht. 
Allerdings habe ich auch jetzt schon öfters gelesen, dass die ganzen 
Codes veraltet sind...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren