-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: ATmega8 als I2C-Slave mit neuem ASURO-Bootloader (peli51)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.05.2006
    Beiträge
    62

    ATmega8 als I2C-Slave mit neuem ASURO-Bootloader (peli51)

    Anzeige

    Wie ich in einem anderen Beitrag in diesem Forum berichtete, ist es ja durch meinen neuen Bootloader für den ASURO möglich, den Resonator auszulöten und die freigewordenen Pins für eine Software-I2C-Schnittstelle zu nutzen (PB6=SDA/PB7=SCL). Da ich gerne an meinem ASURO analoge Abstands-Sensoren von Sharp betreiben möchte stand ich vor dem Problem, aber wo anschliessen? Auf die Linienverfolgung will ich nicht verzichten, deshalb schied ein Auslöten der Bauteile der Linienverfolgung, um an den dann freiwerdenden analogen Eingängen die Astands-Sensoren anzuschliessen, für mich aus. AD-Wandler für den I2C-Bus sind auch nicht gerade billig. Also habe ich an den I2C-Bus einen zusätzlichen ATmega8L angeschlossen (kostet 2,70 Euro) der mit einer von mir geschriebenen Software jetzt als I2C-Slave arbeitet. Damit habe ich jetzt zusätzlich 4 ADC-Eingänge und 16 digitale I/O-Pins zur Verfügung. Wenn das mal nicht ausreichen sollte, kann man ja noch einen ATmega8-Slave mit einer anderen Slave-Adresse draufpacken. Den ATmega8-Slave habe ich auf einer der Experimentier-Platinen des ASURO aufgebaut. Ich werde Henk mal bitten, die Software für den I2C-Slave, einige Programmbeispiele und die Bilder von der Erweiterungs-Platine auf seiner Homepage bereitzustellen. Evtl. hat Arexx ja auch Interesse, eine Erweiterungsplatine speziell für diese Anwendung zu erstellen? Ein kleines Anwendungsbeispiel (dieses Programm erzeugt beim Slave-ATmega8 an PB1 von PORTB ein Rechtecksignal):


    #include <avr/io.h>
    #include "i2cmaster.h"
    #include "twi_register.h"

    #define BIT(n) (1<<(n))

    /***************************************
    sendet einen befehl plus parameter
    zum m8-slave
    ****************************************/
    void twi_send( unsigned char befehl, unsigned char parameter )
    {
    i2c_start_wait(TWI_ADR+I2C_WRITE); // verbindung aufbauen
    i2c_write( befehl ); // befehl für den slave
    i2c_write( parameter ); // parameter des befehls
    i2c_stop(); // verbindung beenden
    }

    /******************
    hauptprogramm
    *******************/
    int main(void)
    {
    i2c_init(); // I2C initialisieren
    twi_send( TWI_SET_DDRB, BIT(PB1) );// pinb1 von portb = ausgang

    for( ; ; ) // endlosschleife
    {
    twi_send( TWI_SET_PINB, PB1 ); // pinb1 von portb auf h setzen
    twi_send( TWI_RES_PINB, PB1 ); // pinb1 von portb auf l setzen
    }

    return(0);
    }

    Zur Erklärung: Der I2C-Atmega8-Slave wartet in der I2C-Interruptroutine auf einen Befehl vom Master und einen evtl. dem Befehl zugehörenden Parameter. Somit ist es möglich, beim Slave Portpins als Aus-oder Eingänge zu programmieren, den Zustand der Portpins oder der ADC-Eingängen zu lesen, usw.

    Das Programm erzeugt am PB1 des Slaves ein Signal von ca. 1,5KHz. D.h. für das Setzen oder Rücksetzen eines Portpins benötigt das Programm ca. 0,3ms was für Reaktionen auf irgenwelche externen Ereignisse dicke ausreicht.

    Viele asurorische Grüße, Peter (Ronny10 ehem. Peli51)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Beiträge
    34
    hallo ronny10,
    könntest du mir vielleicht mal den schaltplan von deinem Modul zusenden?
    wär echt nett. meine Mail: maltesrocke@yahoo.de

    Gruß
    Malte

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    23.05.2006
    Beiträge
    62
    Hallo srocke,
    dafür gibt es keinen Schaltplan. Was sollte ich denn da zeichnen, zwei Anschlüsse des Mikrocontrollers?. Der ATmega8 hat zwei Pins mit den Bezeichnungen SCL und SDA. Das sind die beiden Leitungen für den I2C- bzw. TWI-Bus. Lese dir doch bitte mal meine anderen Forenbeiträge zu dem Thema "neuer Bootloader für den ASURO" durch, dann wird bestimmt einiges für dich verständlicher! Wenn du dann noch Fragen hast, melde dich einfach noch einmal!

    Viele asurorische Grüße

    Peter (Ronny10 ehem. peli51)

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Beiträge
    34
    ich hatt ein anderes Thema aufgemacht zu der I2C erweiterung für den asuro und einer hat gesagt das ich mir das hier mal durchlesen sollte. da ich mich noch nich so gut auskenne dachte ich dass man einen atmega8 für die I2C port erweiterung für den asuro benutzt und so dadurch viele neue pins bekommt.
    Sorry!
    Gruß
    Malte

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    23.05.2006
    Beiträge
    62
    Hallo srocke,
    Ja, dass kannst du auch. Nur muss der Slave (ATmega mit einem entsprechenden Programm versorgt sein, damit er als Slave auf dem I2C-Bus arbeiten kann. Dieses Programm kann ich dir gerne zuschicken. Dann kannst du, wie oben in meinem Beispielprogramm dargestellt, die Portpins ansprechen und auch den Slave-ADC auslesen (Kanal 0-3). Kannst du denn einen ATmega8 mit einem hex-File über PonyProg2000 oder einem ähnlichen Programm programmieren?

    Asurorische Grüße

    Peter (Ronny10 ehem. peli51)

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Beiträge
    34
    hi,
    leider noch nich. ich habe bisher nur meinen asuro. da ich das alles mit robotern und programmieren noch nich so gu drauf hab (ich bin 14), wollte ich mich mal durch dieses tut (http://www.mikrocontroller.net/tutorial/) arbeiten. da programmiert man den atmega8 ja auch direkt (dasmeintest du doch oder?)
    wenn ich jetzt auf die erweiterungplatine den atmega8 setzen will dann könnte ich doch ungefähr diese schaltung übernehmen (damit man da überhaupt weiter arbeiten kann):
    dann müsste man noch dieses mit dem slave machen. leider weiß ich nicht ganz genau was du damit meinst. heißt das etwa, dass man dem atmega8 auf der erweiterungsplatine "sagen" muss, dass er nicht alleine arbeiten soll sondern die befehle von dem anderen prozessoren annehmen soll?
    Viele Grüße
    Srocke
    PS: hast du evtl icq damit wir etwas besser uns unterhalten können?

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    23.05.2006
    Beiträge
    62
    Hallo srocke, die Schaltung kannst du so nachbauen, evtl. mit einem 8MHz Quarz. Auf die Erweiterungs-Platine vom ASURO passt der ATmega8 nicht drauf. Die Platine hat leider zu wenig Lötstützpunkte, oder du musst einige Beinchen vom IC in der Luft baumeln lassen! Wenn du so wenig Erfahrung mit Mikrocontrollern hast, dann beschäftige dich erst einmal mit dem Basiswissen bevor du mit dem I2C-Bus beginnst! Das Tutorial kann ich dir bestens empfehlen. Du musst in der Lage sein, bei einem neuen ATmega8 die Configurations-Bits (z.B. mit PonyProg2000) neu zu programmieren. Sonst nutzt dir der externe Quarz nichts. Der ATmega8 wird von ATmel so ausgeliefert, dass er mit seinem internen RC-Generator und einem 1MHz System-Takt arbeitet. Um den internen Taktgenerator zur Zusammenarbeit mit deinem externen Quarz zu bewegen, müssen die Configurations-Bits im Mikrocontroller entsprechend umprogrammiert werden!

    Gruß Peter (Ronny10 / peli51)


    Peter (Ronny10 / peli51)

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Beiträge
    34
    wie man das macht steht doch in dem tutorial. also kann ich das ja oder reicht das nich was da steht?
    ich dachte eigentlich, dass ich auf die erweiterungsplatine noch eine größere setze und auf der eigentlichen (zu kleinen) erweiterungsplatine bau ich die schaltung auf nur dass der prozesser eine "etage" höher ist.

    Gruß
    Srocke

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    28
    Beiträge
    184
    Hallo Ronny,

    ich würde gerne das programm für die slave ATMEGA8 haben. Kannst du mir es schicken? Vielen dank.

    email: raid_ox (at) yahoo.de

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    28
    Beiträge
    184
    Übrigens noch, kann man den neuen bootloader runterladen und per isp-programmer übertragen? wenn ja, wo kann man ihn finden?

    was ist PB6 und PB7? ist das nicht die Anschluss zum 8mhz quarz? Wenn man es auslöten, funktioniert asuro doch nicht mehr, oder?

    danke

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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