- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 13

Thema: I2C und SAA1046

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2014
    Beiträge
    6

    I2C und SAA1046

    moin

    Ich habe da mal eine Frage. Wir sollen im Rahmen eines Schulprojektes zwei Platinen mittels I2C verbinden. Das eine ist ein sogenanntes KISSBoard mit einem Atmel AT89S52 und das andere ist eine sogenannte I2C-Experimentier Platine auf der 4 7-Segment anzeigen verbaut sind die mittels SAA1064 angesteuert werden sollen. Mein Problem ist das ich immer entweder Anzeige 1 und 3 oder 2 und 4 oder alle 4 ans Leuchten bekomme. Diese Steuer ich über das control byte an. Ich bekomme es aber nicht hin das ich die einzelnen Segmente jeweils eine Zahl oder Zeichen anzeigen lassen kann.

    Mein Programm Codes sieht derzeit so aus

    Code:
    while(1)
    {
         if(TASTER==0)
            {
        
                I2C_clock();            //clock
                I2C_start();            //start
                I2C_write(0b01110000);  //address Byte
                I2C_ack();
                I2C_write(0b00000000);  //instruction Byte
                I2C_ack();
                I2C_write(0b01110111);  // control Byte
                I2C_ack();
                I2C_write(0b10101010);        // data digit 1
                I2C_ack();
                I2C_write(0b01010101);        // data digit 2
                I2C_ack();
                I2C_write(0b01010101);        // data digit 3
                I2C_ack();
                I2C_write(0b10101010);        // data digit 4
                I2C_ack();
                I2C_stop();             //stop
             }
    das was die einzelnen Segmente anzeigen sollen ist hier gerade nicht logisch da ich das erst einmal zum Testen so eingestellt habe um zu schauen ob überhaupt was passier.

    Ich würde mich darüber freuen eine schnelle und Anfänger freundliche Antwort zu bekommen

    gruß
    Geändert von Dennis Prinz (29.12.2014 um 17:42 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Dennis Prinz Beitrag anzeigen
    Code:
    while(1)
    {
         if(TASTER==0)
            {
        
                I2C_clock();            //clock
                I2C_start();            //start
                I2C_write(0b01110000);  //address Byte
                I2C_ack();
                I2C_write(0b00000000);  //instruction Byte
                I2C_ack();
                I2C_write(0b01110111);  // control Byte
                I2C_ack();
                I2C_write(0b10101010);        // data digit 1
                I2C_ack();
                I2C_write(0b01010101);        // data digit 2
                I2C_ack();
                I2C_write(0b01010101);        // data digit 3
                I2C_ack();
                I2C_write(0b10101010);        // data digit 4
                I2C_ack();
                I2C_stop();             //stop
             }
    das was die einzelnen Segmente anzeigen sollen ist hier gerade nicht logisch da ich das erst einmal zum Testen so eingestellt habe um zu schauen ob überhaupt was passier.
    Passiert denn was? Welche Segmente werden denn mit dem Programm angezeigt?

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.301
    Eigentlich sollten an Stelle 1 und 4 die Segmente b, d, f und Dezimalpunkt leuchten und an Stelle 2 und 3 die Segmente a, c, e und g.
    Ich programmiere mit AVRCo

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    @Dennis

    Es ist natürlich schwer, einen Code zu analysieren, der nur aus Calls in eine unbekannte Library besteht.

    Einiges kann man ahnen, anderes weniger.

    I2C_start() und I2C_stop() dürften die entsprechenden Signale auf den Bus legen und I2C_write(xx) ein Byte senden. Aber was macht I2C_clock()? Die Clock auf einen Wert einstellen kann nicht sein, es gibt ja keinen Parameter und die Clock starten kann auch nicht sein, vor einem Start gibt es bei I2C keine Clock. Und was macht I2C_ack()? Ein ACK senden kann es nicht sein, das ACK kommt immer von dem, der gerade Daten empfangen hat. Und eine Abfrage, ob ein ACK empfangen wurde, kann es eigentlich auch nicht sein, dann würde ja irgendwas wie ein if im Code vorkommen.

    Bevor das nicht wirklich geklärt ist, braucht man sich über Bitkombinationen keine Gedanken zu machen.

    Hier mal kurz den Anfang einer I2C Übertragung:

    Code:
    Start erzeugen
    Adressbyte senden
    empfangenes ACK bzw NAK auswerten
    wenn NAK
            Slave antwortet nicht, Übertragung abbrechen
            Stop erzeugen
       
    wenn ACK
    weiter senden
    .
    .
    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Ähnliche Themen

  1. PCF8574 und PC847 - I2C und Optokoppler
    Von saarelektrik im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 24.12.2013, 13:08
  2. RP6 Base mal als i2C Master und als I2C Slave
    Von Lurchi im Forum Robby RP6
    Antworten: 6
    Letzter Beitrag: 15.05.2009, 21:08
  3. I2C und Interrupteingänge
    Von liggi im Forum Asuro
    Antworten: 29
    Letzter Beitrag: 20.12.2007, 02:41
  4. ATmega8 und I2C
    Von xiaoma1980 im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 25.07.2006, 20:24
  5. Mega8 und I2C
    Von avrwalli im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 06.04.2005, 19:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen