-
-
Neuer Benutzer
Öfters hier
Hallo Dirk,ich hab versucht die letzte Zeit den sensor zum laüfen zu bringen aber immer noch kein Erfolg.-(
der File i2cmaster.S ist schon im Source Files und wenn ich es kompeliere bekomme ich als Antwort :kein fehler vorhandeln.die RS232 Verbindung ist in ordung weil, wenn ich den Sensor von der Mikrokontroller raussiehe,dann lese ich die variable 'x' als empfangener wert .hab versucht mit deinem Programm und so sieht aus:
#include <inttypes.h>
#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <math.h>
#include <avr/io.h>
#include "i2cmaster.h"
#define SRF 0xE0
#define F_CPU 8000000UL
#include <util/delay.h>
#define BAUD 9600L
#include <avr/iom8515.h>
#include <avr/sfr_defs.h>
#define SDA 0 // SDA Port E, Pin 0
#define SCL 1 // SCL Port E, Pin 1
#define SDA_PORT PORTE // SDA Port E
#define SCL_PORT PORTE // SCL Port E
unsigned int distance EEMEM; // reserve storage space in EEPROM
// USART_INIT--
void initusart(void) // Hauptfunktion
{
unsigned char x; //Hilfsvariable
// #idef UBRRL //USART-Schnittstelle
UBRRL = (F_CPU / (16L*BAUD)) -1; //Baudrate mit TAKT und Baud
UCSRB |= (1<<TXEN) | (1<<RXEN); //Sender und Empfänger ein
UCSRC |= (1<< URSEL) | (1<< UCSZ1) | (1<<UCSZ0); //ansync 8bit
x = UDR;
}
void sendeusart(int x)
{
while (!(UCSRA & (1<<UDRE))); // warten bis Senden moeglich
UDR = x;
}
int main(void)
{
i2c_init();
initusart();
sendeusart(distance);
unsigned char Lbyte,Hbyte;
DDRE = 0xff;
PORTE = 0xff;
while(1)
{
i2c_init(); muss ein sonst blinkt der sensor nicht
i2c_start(SRF);
i2c_write(0x00);
i2c_write(0x51);
i2c_stop();
_delay_ms(75);
i2c_start(SRF);
i2c_write(0x02);
i2c_stop();
i2c_start(0xE1);
Hbyte=i2c_readAck();
Lbyte=i2c_readNak();
i2c_stop();
distance=(Hbyte*256)+Lbyte;
eeprom_write_word(&distance,distance); //save to EEPROM
sendeusart(distance);
}
}
ich bekomme jetzt die 0 als antwort(benutze Hyper Terminal fürs Auslesen) was ich komisch finde weil ,die distance ist nicht mehr gleich 0 wie beim vorjerigen Programm.
ich weiss nicht woran es liegt ,dass der sensor immer kein Messwerte gibt .
also ich arbeite mit dem AVR4 Studio.kannst bitte mal guckenich da noch machen kann,oder vielleicht hast ein anderen Programm auf C sprache oder assembler die ich benutzen kann.
bitte Dirk ich verlasse mich auf dich ,bin echt kurz vom Aufgeben.
danke
schöne Grüsse
Alexandra
-
Erfahrener Benutzer
Fleißiges Mitglied
Alexandra,
mit source file meintest Du hoffentlich das makefile.
Hab ich das richtig verstanden:
+ bei Deinem ersten Program war distance = $FF (das entspricht dem Lesen des Low Bytes als $FF z.B. wenn der I2C Bus nur auf high steht und das High Byte ist noch der Wert aus der Initialisierung).
+ beim aktuellen Programm ist distance = $00 (das entspricht ja dem Wert bei Initialisierung).
Eigentlich müßte distance doch ein 2-Byte Wert sein, also $FFFF oder $0000, oder?
Was steht denn nach dem Programmlauf im EEPROM für distance?
Gruß, Dirk.
-
Neuer Benutzer
Öfters hier
hallo Dirk,die Disatance ist ja 0 dec oder 000 hex.so kann ich das lesen.die EEPROM distance kann ich nicht lesen da ich nur den Wet 0 lesen kann mit dem Programm .
kannst du mir bitte sagen,was ich noch für möglichkeit hab , den sensor zum Messen zu bringen ?scheint die sache echt sehr schwer irgendwie für mich ?
keine Ahnung aber irgendwie ,will der sensor mit mir incht reden :-=
danke
Schöne Grüsse Alexandra
-
Erfahrener Benutzer
Fleißiges Mitglied
Also mir fällt dann noch ein:
Häng mal ein Oszilloskop and SDA und SCL und schau Dir an, was da abgeht.
Gruss, Dirk.
-
Neuer Benutzer
Öfters hier
hallo Dirk.hab ich schon gemacht und man sieht dass irgendetwas übertragen werd.also ein Zeichen hat man aufjedenfall.das heisst es werd was übertragen.
Ich versuche jetzt mit der Atmega16 statt die 8515 und gucken wir was passieren werd.bis jetzt hab ich probleme mit dem Flach Programm aber hoffe bis nexte woche hab ich schon in griff danke und schönen abend noch
grüsse
alexandra
-
Erfahrener Benutzer
Fleißiges Mitglied
Kannst Du denn am Oszi die gesendeten und empfangenen Bytes erkennen? z.B die Addresse und den Befehl, der geschrieben wird und dann später Addresse+1 und das gelesenen Byte?
Du mußt immer schauen, wenn SCL low ist, wie dann die SDA Leitung steht.
So kannst Du die Fehlersuche eingrenzen.
Gruß, Dirk.
-
Neuer Benutzer
Öfters hier
hallo Dirk.vielen dank für deine Hilfe,du hast mir echt sehr geholfen.Den Sensor funktionniert jetzt und ist alles ok.
Es lag an den Mikroschip:hab jetzt ein ATmega 16 und an die Pin von SCL und SDA.bin echt froh dass alles so gut gelaufen ist .
Danke nochmal
Alexandra
Schöne Grüsse
-
Erfahrener Benutzer
Fleißiges Mitglied
Hallo sterncapture,
was zeigt denn die LED am Modul im gut-Fall an?
-
Erfahrener Benutzer
Fleißiges Mitglied
Ich hab meinen inzwischen auch ans Laufen bekommen. Die Led blitzt bei jeder Messung kurz auf.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen