Pages: [1]   Go Down
Author Topic: Frage zu Atmega32 und i2c  (Read 870 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 1
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich habe es geschafft auf einen atmega32 den arduino bootloader zu flashen.
Auch lassen sich alle Pins zum schalten von z.B. LED's nutzen.

Nur nun bräuchte ich an dem atmega32 noch eine RTC.
Die habe ich wie gewohnt an den dafür vorgesehenen Pins (SDA/SCL) angeschlossen. Nur leider kommt keine Zeit.

Es ist bestimmt nur eine Kleinigkeit die noch fehlt, damit i2c mit dem atmega32 funktioniert, aber im Moment übersteigt diese Art "erweiterung" meine Fähigkeiten.

Was könnte da noch fehlen?

Hat es was mit "wiring" zu tun, oder mit der "portzuweisung", oder beidem oder noch viel mehr oder ganz was anderem?
So grob bilde ich mir schon ein zu verstehen was da passiert, aber im detail hab ich da keinen blassen schimmer wo ich da nun anfangen könnte das problem zu lösen.

Könnte mir jemand helfen?

Grüße...
...eok
Logged

0
Offline Offline
Full Member
***
Karma: 6
Posts: 153
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo eok,

was haste denn für eine RTC, ich habe vor kurzem eine DS1307 ohne Probleme
angeschlossen.

Gruss Kalli
Logged

Meran/BZ/IT
Offline Offline
Full Member
***
Karma: 0
Posts: 184
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

hast Du
   Wire.begin();
in die
   void setup()
geschrieben?

Die richtige I2C-Adresse gesetzt?

Gruß Reinhard
« Last Edit: July 21, 2011, 11:41:09 am by spaceball » Logged

0
Offline Offline
Newbie
*
Karma: 1
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

erst mal danke, dass ihr geschrieben habt!

ok.. hier mal das was ich habe:
die arduino ide habe ich nach dieser anleitung für den atmega32 umgebaut:
http://wiki.edwindertien.nl/doku.php?id=software:bootloaders#arduino_bootloader_for_atmega32

dann habe ich meinen arduino als isp geflasht um damit dann den bootloader in den 32er zu brutzeln.
auch das ging:


alle ports kann ich ansprechen.
auch eine multiplex-library läuft auf dem 32er:


da ich aber eine uhr damit aufbauen will habe ich nun eine meiner rtcs genommen.
die habe ich schon auf dem 328er mit erfolg im einsatz.
@kalli, ja es ist eine selbst gebaute ds1307 rtc wie sie aber auch von sparkfun, watterott und anderen verkauft wird:
http://www.flickr.com/photos/eokgnah/5955121235/in/photostream

die rtc ist an einem 328er getestet und mit der passenden zeit gestellt worden, so dass ich weis, dass sie geht.

nur am 32er bringe ich die nicht zum laufen und verzweifle noch daran. deswegen ja hier mein hilferuf.

zum testen/auslesen nehme ich das der librarie mitgelieferte test programm:
Code:
/*
 * TimeRTC.pde
 * example code illustrating Time library with Real Time Clock.
 *
 */

#include <Time.h>  
#include <Wire.h>  
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

void setup()  {
  Serial.begin(9600);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  if(timeStatus()!= timeSet)
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");      
}

void loop()
{
   digitalClockDisplay();  
   delay(1000);
}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

@spaceball: in dem example-code steht kein "Wire.begin();" im setup! es läuft aber ohne auf dem 328er! dennoch habe ich, deinem tip folgend, ein "Wire.begin();" eingefügt und es noch einmal mit dem 32er getestet. leider ohne erfolg.
du schreibst dann noch "richtige i2c adresse gesetzt?". hmmm... wenn du schon so fragst... wahrscheinlich nicht? was mache ich falsch? welche muss ich serten? ich hatte noch nicht das problem eine setzen zu müssen mit dem 328er, und ich dachte da es am 32er auch nur einmal das sda/scl pin-pärchen gibt bräuchte ich das hier auch nicht, aber vielleicht ist ja das mein denkfehler.

welche files musstet ihr wie abändern?
habt ihr die ide auf windows, mac oder auf linux am laufen? macht es einen unterschied oder sollte es überall funktionieren?
ich hab hier primär nen mac, sekundär windows und ein netbook auf ubuntu hätte ich auch noch, also könnte ich damit auch linux abdecken. ;-)
das wird doch zu schaffen sein.. oder?

grüße...
...eok
Logged

Meran/BZ/IT
Offline Offline
Full Member
***
Karma: 0
Posts: 184
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
Teste mal, ob die I2C Verbindung überhaupt funktioniert:
Die I2C-Adresse der DS1307 sollte 0x68 sein

Folgende Funktionen zum direkten beschreiben/auslesen der Speicherzellen.
Code:
#define DS1307           0x68  //I2C Adresse

byte read_I2C_Byte ( int I2C_Adresse, byte Daten_Adresse)
{
  Wire.beginTransmission(I2C_Adresse);
  Wire.send(Daten_Adresse);
  Wire.endTransmission();
  Wire.requestFrom(I2C_Adresse,1);
  return (Wire.receive());
}

void write_I2C_Byte ( byte I2C_Adresse, byte Daten_Adresse, byte Daten )
{
  Wire.beginTransmission (I2C_Adresse);
  Wire.send (Daten_Adresse);
  Wire.send (Daten);
  Wire.endTransmission();

Zugriffsbeispiel:
Code:
Byte Daten_Adresse = 15; // RTC benutzt Byte 0-7
byte Wert = 145;            // irgendein Wert zum testen
write_I2C_Byte            ( DS1307, Daten_Adresse    , Wert    );
byte gelesenesByte = read_I2C_Byte ( DS1307, Daten_Adresse);


Dann kannst Du ja "gelesenesByte" mit print zur Überprüfung ausgeben lassen...

Gruß Reinhard
Logged

0
Offline Offline
Newbie
*
Karma: 1
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi reinhardt,

nein, mein i2c scheint nicht zu funktionieren.

hier mein test-sketch den ich nach deinem vorbild gemacht habe:
Code:
#include <Wire.h>
#define DS1307           0x68  //I2C Adresse

void setup() {
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
  byte Daten_Adresse = 15; // RTC benutzt Byte 0-7
  byte Wert = 145;         // irgendein Wert zum testen
  Serial.println("schreibe byte");
   Wire.beginTransmission (DS1307);
   Wire.send (Daten_Adresse);
   Wire.send (Wert);
   Wire.endTransmission();
  Serial.println("lese byte");
   Wire.beginTransmission(DS1307);
   Wire.send(Daten_Adresse);
   Wire.endTransmission();
   Wire.requestFrom(DS1307,1);
   byte gelesenesByte = Wire.receive();
  Serial.print("byteinhalt = ");
  Serial.println(gelesenesByte, DEC);
  Serial.println("ende");
}

void loop() {
}

es kommt nur "schreibe byte" und dann geht es nicht mehr weiter.

deswegen denke ich ja, dass in meinen files der arduino ide noch was falsch ist. wenn ihr das schon am laufen habt, könnte ich den ordner mit euerer arduino app gezippt mal bekommen? dann müsste es ja gehen.. oder anders... nach welcher anleitung habt ihr euere arduino ide abgewandelt, damit der atmega32 damit funktioniert?

dann fange ich noch einmal bei null an, lade mir hier die arduino software noch mal runter und mache dann die änderungen nach der anleitung wie auch ihr es gemacht habt.

scheinbar fehlen bei der anleitung die ich benutzt habe noch z.b. die i2c sachen. und wer weis was noch alles fehlt.

...eok
Logged

Meran/BZ/IT
Offline Offline
Full Member
***
Karma: 0
Posts: 184
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich glaube, es fehlt noch
Code:
#include<EEPROM.h>
am Anfang.

Gruß Reinhard
Logged

0
Offline Offline
Newbie
*
Karma: 1
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hallo reinhard,

leider half das auch nix.
nur noch mal zur klärung, ich bin hier an einem atmega32! nicht an dem normalen 328er.
mit dem kleinen habe ich diese probleme nicht. da läuft alles tadellos.
nur mit dem 32er habe ich diese probleme.

da man ja viele files in der ide von hand ändern muss damit der 32er erkannt und benutzt werden kann, und es verschiedene unterschiedliche anleitungen gibt, denke ich dass da der hund begraben ist.

falls du (oder jemand anders) die rtc mit einem atmega 32 am laufen hat, würde mich interessieren was in der ide geändert wurde. denn so wie es ausschaut sind die änderungen die ich gemacht habe unvollständig. es gehen zwar die standard-i/o dinge wie port high und low und multiplexen, aber das i2c scheint noch zu fehlen bei meinen änderungen.

...eok
Logged

Pages: [1]   Go Up
Jump to: