Forum: FPGA, VHDL & Co. USB-Blaster DE2 Probleme & I2C Core Programm Fehler oder Sensor kaputt?


von No Y. (noy)


Lesenswert?

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
}

von Duke Scarring (Gast)


Lesenswert?

No y. schrieb:
> Stimmt mein Code nicht, läuft der I2C Core nicht oder ist der Sensor
> kaputt?
Ob der Code mit dem Core zusammen spielt, das siehst Du in einer 
Simulation.

Ich habe mir zum Debuggen ein Progrämmchen geschrieben, das alle 
I2C-Adressen anklingelt und guckt, ob ein ACK zurückkommt. Somit kann 
ich rausfinden, ob alle Busteilnehmer gefunden werden und ob das Problem 
auf der Master- oder auf der Slaveseite zu suchen ist.

Duke

von No Y. (noy)


Lesenswert?

Fehler gefunden dank nem LA + Multimeter.
Hatte SCL und SDA an die falschen Pins vom Header angeschlossen. Wenn 
man nicht richtig nachschaut.... daher lagen die beiden konstant auf GND 
also es war kein Tristate Buffer dazwischen.
Jetzt umgesteckt und es rennt 1A.

Jetzt bleibt nur noch das Problem mit dem USB-Blaster am "großen 
Rechner" der Laptop is mit seinem "nur" i7-Dual (leider ja Low-Power) 
ein wenig langsam zur Synthese und der Bildschirm is so klein...:(

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.