Hallo Forum,
ich habe momentan 2 Probleme:
1. Bei meinem Hauptrechner funktioniert der USB-Blaster der DE2 Boards
nicht richtig. Er wird zwar als erkannt und mit den richtigen Treibern
angezeigt, allerdings taucht er im Quartus Programmer immer mal wieder
nur kurz auf und verschwindet dann auf unbestimmte Zeit wieder. Leider
ist es so immer Glücksspiel ob die Übertragung mal klappt und mal nicht,
nervt halt tierisch....
Achja benutze Quartus 13.0.1 und auch bei der USB Anbindung habe ich
schon alles durch. Verschiedene Kabel (auch längen), mit ohne aktiv Hub,
mit ohne USB Isolator..
An meinem Laptop funktioniert es aber tadellos.
2. Ich habe ein BMP085 Sensor Modul aus China für 3$ gekauft und an das
DE2 Board passend angeschlossen ( PIN Header) und einen Nios mit dem I2C
Core von opencores bzw aus dem Altera Wiki draufgespielt. Der Nios läuft
und zeigt mir auch schon alles am LCD an. Allerdings antwortet der
Sensor anscheinend auf egal welche Adresse. Also auch wenn ich nicht die
0x77 anspreche wird von der I2C Funktion ein Ack ausgegeben. Und wenn
ich versuche ein Register auszulesen bekomme ich immer 0xFF was
eigentlich nicht sein darf (Code ist auskommentiert!). Aschja die ganzen
wait Befehle hab ich reingebaut weil ich gehofft hab das es so vll.
geht.
Stimmt mein Code nicht, läuft der I2C Core nicht oder ist der Sensor
kaputt? Wie finde ich die Lösung??
Code:
1 | #include <stdio.h>
|
2 | #include "system.h"
|
3 | #include "i2c_opencores.h"
|
4 | #include "unistd.h"
|
5 | #define BMP085_ADDRESS 0x77
|
6 | int main()
|
7 | {
|
8 | FILE *fp=fopen ("/dev/LCD","w");
|
9 | I2C_init(I2C_BASE,ALT_CPU_FREQ,100000);// 100kHz
|
10 | usleep(100000);// in [µs]
|
11 | int data;
|
12 | int i;
|
13 | data = I2C_start(I2C_BASE,BMP085_ADDRESS,0); //set chip address and set to write/
|
14 | usleep(250000);
|
15 | fprintf(fp,"0x%x",data);
|
16 | //I2C_write(I2C_BASE,0xAA,0);
|
17 | //usleep(250000);
|
18 | //I2C_start(I2C_BASE,BMP085_ADDRESS,1); //set chip address in read mode
|
19 | //usleep(100000);
|
20 | //for (i=0;i<2;i++)
|
21 | //{
|
22 | //data = I2C_read(I2C_BASE,0); // memory array
|
23 | //fprintf(fp,"Test 0x%x",data);
|
24 | //}
|
25 | //data = I2C_read(I2C_BASE,1); // last memory read
|
26 | //fprintf(fp,"\tdata = 0x%x\n",data);
|
27 | fclose (fp);
|
28 |
|
29 | return 0;
|
30 | }
|