miniRadio mit Attiny13A+TEA5767

Gast #3514047
Lesenswert?

Hallo,
habe mir aus verschiedenen Quellen folgendes gebastelt und wollte mal 
wissen, ob ich noch etwas vergessen habe? Ich nutze die I2C-Bibliothek 
von Peter Fleury. Habe nach folgender Anleitung die Ports für den 
Attiny13 angepasst: 
http://www.dexterindustries.com/howto/working-with-avr/any-port-any-pin-a-twi-master-for-attiny-atmega/

Das Programm sieht so aus, bin aber noch nicht ganz mit dem Datenblatt 
vertraut und hoffe das passt so.
1
#include <avr/io.h>
2
#include "i2cmaster.h"
3

4

5
#define TEA5767  0x60                    // device address of tea5767 => 0b1100000
6

7
int main(void) {
8
  
9
  char frequency = 87.5;                  //starting frequency
10
  char frequencyB = 4*(frequency*1000000+225000)/32768;  //calculating PLL word
11
  char frequencyH = frequencyB>>8;
12
  char frequencyL = frequencyB&0XFF;
13
  
14
  unsigned char ret;
15
  i2c_init();                          // init I2C interface
16
  ret = i2c_start(TEA5767+I2C_WRITE);            // set device address and write mode
17
  
18
    if ( ret ) {
19
        /* failed to issue start condition, possibly no device found */
20
        i2c_stop();
21
    }
22
  else {  
23
    i2c_write(frequencyH);
24
    i2c_write(frequencyL);
25
    i2c_write(0xB0);
26
    i2c_write(0x10);
27
    i2c_write(0x00);
28
        i2c_stop();
29
   }
30
    for(;;);  
31
}
Gast #3514691
Lesenswert?

@jmp
Danke für den Tipp, habs jetzt überarbeitet.
1
#include <avr/io.h>
2
#include "i2cmaster.h"
3

4

5
#define TEA5767  0x60                    // device address of tea5767 => 0b1100000
6

7
unsigned char frequencyH = 0;
8
unsigned char frequencyL = 0;
9
unsigned int frequencyB;
10
double frequency = 0;
11

12
int main(void) {
13
  
14
  frequency = 87.5;                    //starting frequency
15
  frequencyB = (4*(frequency*1000000+225000))/32768;    //calculating PLL word
16
  frequencyH = frequencyB>>8;
17
  frequencyL = frequencyB&0XFF;
18
  
19
  unsigned char ret;
20
  i2c_init();                          // init I2C interface
21
  ret = i2c_start(TEA5767+I2C_WRITE);            // set device address and write mode
22
  
23
    if ( ret ) {
24
        /* failed to issue start condition, possibly no device found */
25
        i2c_stop();
26
    }
27
  else {  
28
    i2c_write(frequencyH);
29
    i2c_write(frequencyL);
30
    i2c_write(0xB0);
31
    i2c_write(0x10);
32
    i2c_write(0x00);
33
    i2c_stop();
34
   }
35
    for(;;);  
36
}

Das Layout ist erst mal nur ein Versuch gewesen, werde die Schaltung 
morgen mal auf einem Breadboard aufbauen. Der Klinke-Ausgang geht an ein 
paar alte Aktivboxen.
Gast #3615045
Lesenswert?

Genauer: die Adresse ist 0x60, denn I2C (standard) hat nur 7-Bit 
Adressen. Nur wird diese als Bit1..7 verschickt und Bit0 entscheidet 
über die Richtung. Steht an entsprechender Stelle in obigen Code sogar 
als Kommentar! Nur beachtet wird es nicht. Also "0x60<<1 + I2C_WRITE"!

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