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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.