Forum: Mikrocontroller und Digitale Elektronik twi. master atmega168 kleines projekt lift


von ali a. (Firma: alibaba) (oohhje)


Angehängte Dateien:

Lesenswert?

hallo liebe freunde :)
ich muß was mit dem atmega basteln und brauche glaub ich hilfe
zum testen erstmal das prgramm :

/*
 * test1.c
 *
 * Created: 30.06.2011 11:18:40
 *  Author: deniz
 */
#include "i2cmaster.h"
#include <avr/io.h>

int main(void)
{
  int i;
  i=1;
    while(1)
    {

       if((schalter[0]>0)||(schalter[1]>0))
         for(i;i==2;i++){
         LED[1]=0x00;
         LED[0]=0x00;
       }else {
         LED[1]=0xFF;
         LED[0]=0xFF;
       }
    }
}
soll nur aus 2 globalen arrays schalter[] überprüfen ob eine der 
schalter gedrückt ist wen ja soll er in die arrays led[0,1] die werte 00 
schreiben

der twi code fragt ab ob in led[0,1]was drin steht wen ja soll er die 
8bit an dieausgänge des  PCA´s  9555d übertragen ,und immer so weiter 
wen in den leds das gleiche drin steht was vorher war dann soll er 
weiter die schalter auslesen

leider geht garnichts an meinem atmega keine leds keine schalter
könnt ihr mir sagen was ich da falsch gemacht hab

das ist überhaut das erste mal mit mikrocontroller :/
also seit etwas nachgiebig

danke für eure hilfe

mein code für twi
/*
 * Appi2c.c
 *
 * Created: 27.06.2011 13:43:58
 *  Author: deniz
 */

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

/*#define PCA1    0x40;//0100000"0(r/w)"
#define PCA2    0x42;//0100001"0(r/w)"
#define PCAComOut1  0x10//00010000
#define PCAComOut0  0x20//00100000
#define PCAComin1  0x40//01000000
#define PCAComin0  0x80//10000000
#define Maske    0x01//00000001*/

unsigned char LED[3];
unsigned char schalter[3];

int main(void)
{
  /*
  int a=0xFF;
  int b=0x5F;
  LED[0]=a;
  LED[1]=b;
  */

  unsigned char Maske = 0x01;
  unsigned char adrPCA1   = 0x40;
  unsigned char adrPCA2   = 0x42;
  unsigned char PCAComOut1 = 0x10;//00010000
  unsigned char PCAComOut0 = 0x20;//00100000
  unsigned char PCAComin1   = 0x40;//01000000
  unsigned char PCAComin0   = 0x80;//10000000
  unsigned char ret;


  i2c_init();
  while(1) {

    if(TWSR==1) { //abfrage ob leitung frei
      //Fehler leitung nicht frei LED PORTB6 an
    } else {
      // LED PORTB6 aus
      // LED[2]=
      // überprüfen ob empfangen/gesendet wird pca1
      // port0.7"letztes bit"
      if((LED[1]&Maske)>0) {
        //überprüfe ob array LED [1,2] gleich LED[3,4] ist
        if(((LED[0]&LED[2])==0)&&((LED[1]&LED[3]))) {
          //ende der schleife zurück zur while
        } else {
          //for() //twi master routine led{}
          // setze adresse des PCA + schreibbit
          ret = i2c_start(adrPCA1+I2C_WRITE);
          if ( ret ) {
            // fehler mit der start adresse gerä t nicht gefunden
            i2c_stop();
            //PORTA=0x; // port ausgeben für gerät nicht gefunden
          } else {
            //die command für  ports 1.x werden gesendet
            // zum schreiben ??? richtig ?
            i2c_write(PCAComOut0);
            // die 8bits die in array led[1]gespeichert sind
            // werden übertragen
            i2c_write(LED[0]);
            i2c_stop(); //stop ,)
            i2c_rep_start(adrPCA2+I2C_WRITE);
            // die command für  ports 1.x werden gesendet
            // zum schreiben ??? richtig ?
            i2c_write(PCAComOut1);
            // die 8bits die in array led[1]gespeichert
            // sind werden übertragen
            i2c_write(LED[1]);
            i2c_stop(); //stop
            LED[3]=LED[1];
            LED[2]=LED[0];


            */
            /*ret = i2c_start(adrPCA2+);
            if ( ret ) {
              // fehler mit der start adresse gerät nicht gefunden
              i2c_stop();
              // port ausgeben für gerät nicht gefunden
              //PORTA=0x;
            } else {
              // die command für  ports 1.x werden gesendet
              // zum schreiben ??? richtig ?
              i2c_write(PCAComOut1);
              // die 8bits die in array led[1]gespeichert
              // sind werden übertragen
              i2c_write(LED[1]);
              i2c_stop(); //stop
              LED[3]=LED[1];
              /*oder:
                int led0;
                led3=LED[1];
                LED[3]=led3;
            */
            }
          }
        }
      } else {
        //zum test vielleicht eine LED an machen an portaob
        //er im emfangen zustand ist
        //if(schalter[1,2]==schalter[3,4]) {
        //keine schalter gedrückt schleife von vorn
        //else {
        ret = i2c_start(adrPCA1+I2C_READ);
        // die command für  ports 1.x werden gesendet
        // zum schreiben ??? richtig ?
        i2c_write(PCAComin1);
        schalter[0] = i2c_readNak();
        i2c_rep_start(adrPCA2+I2C_READ);
        i2c_write(PCAComin0);
        schalter[1] = i2c_readNak();
        i2c_stop();
      }
      /* copy von schalter und led auf array [3 und 4 ] ablegen */
    }
  }
}




ich weis garnicht ob ich twi richtig benutzt habe
irgendwie klapt es nicht muß ich mein test1.c an die twi dran hängen mit 
include damit ich das auf dem atmel bekomme ? oder packt er beide 
programme in den flash ,wen ich sie einzel drauf packe "das haken wech 
machen bei erase device before programming " im avr studio 5

von Frag' Denis (Gast)


Lesenswert?

ali abduhl schrieb:
> ich muß was mit dem atmega basteln

Du Armer ...

von Michael (Gast)


Lesenswert?

Dann must du uns vielleicht mal verraten, was du am I2C angeschlossen 
hast.

von ali a. (Firma: alibaba) (oohhje)


Lesenswert?

2pca9555d
port expender
und an den sind led´s und schalter angeschlossen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.