Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
oderlachs
Na ja nun fordert erst mal die Kirschenernte meine Anwesenheit, mal sehen wann ich wuieder Zeit dafür finde.
Dann mal mehr ernten als essen :D
Hier mal einen zusammengeschraubten Code, basierend auf den von mir verlinkten Fleury Libs, diese müssen sich im selben Verzeichnis, wie die ds1307.c befinden.
Bei den AVR-Studios muss die CPU-Frequenz über die Projekteinstellungen definiert werden, sonst wird sie nicht übernommen, so zumindest meine Erfahrung. Das dürfte am automatisch erstellten Makefile liegen.
Bei AVR-Studio 4 unter Project --> Configuration Options --> General. Bei anderen AS-Versionen muss man ggf. ein Symbol anlegen, das ist dort Projekteinstellungen --> Toolchain --> Compiler --> Symbols, dort ein neues Symbol mit F_CPU=16000000UL erzeugen.
Die Hex-Datei zum direkten Flashen hängt auch mit an, Hardware hab' ich hier keine, die Hex ist aber dahingehend überprüft, dass die CPU-Frequenz stimmt und die Funktionen (prinzipiell) das machen, was sie sollen.
Code:
#include <avr/io.h>
#include <util/delay.h>
#include "twi_lib.h"
#define led_port PORTB
#define led_port_dir DDRB
#define alive_led (1<<PB0)
#define err_led (1<<PB1)
#define alive_led_off led_port |= alive_led
#define alive_led_tgl led_port ^= alive_led
#define err_led_on led_port &= ~err_led
#define err_led_off led_port |= err_led
#define rtc_base_addr 0xD0
#define sec_regaddr 0
int main (void) {
unsigned char sec;
unsigned char last_sec = 0;
led_port_dir = (alive_led | err_led);
alive_led_off;
err_led_off;
i2c_init();
while(1)
{
err_led_off;
if (!i2c_start(rtc_base_addr | I2C_WRITE)) err_led_on;
if (!i2c_write(sec_regaddr)) err_led_on;
if (!i2c_rep_start(rtc_base_addr | I2C_READ)) err_led_on;
sec = i2c_readAck();
i2c_stop();
if (sec != last_sec)
{
last_sec = sec;
alive_led_tgl;
}
_delay_ms(100);
}
return 0;
}
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
oderlachs
ich kann dem Listing zwar nicht ganz entnehmen was da vorsich gehen soll, aber wenn an Port B1 die ErrorLed sein soll so leuchte diese ständig nach dem flashen des µCs
Nun, die Error-Led soll nicht leuchten. Was verwendest Du als Pullup für SCL & SDA?
- - - Aktualisiert - - -
Kann es sei, dass Du keine Pullups dran hast? Dann arbeitet der Bascom-Code, weil er interne Pullups verwendet.
Dann verwende mal das Hex hier im Anhang.
Oder ist das noch die RTC aus diesem Thread?