PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit dem PC-I2C-Bus VB Demo



Schleifchen
27.11.2004, 09:24
Hallo,
habe mir gerade das Beispielprogramm für den I2C-Bus nach PC Adapter runtergeladen.
Leider kommt die GUI nicht hoch, die Prozessorlast steht bei 100% und ich werde das Programm nur noch mit Ctrl+Alt+Entf wieder los.
Öffnen mit VisualStudio .NET geht auch nicht, da für das MSCOMM.OCX keine Lizenz beiliegt.
Bin ich der einzige mit diesem Problem?
Für Lösungsvorschläge wäre ich echt dankbar.

Schleifchen
27.11.2004, 09:28
Achja, da war noch was...
ich nutze WinXP Pro mit SP2. Auf einem durchnitts PIV.

prospam
03.02.2005, 12:52
Hy,

ist bei mir auch so ähnlich.
mache follgendes:

RS232 -> I2C Adapter anschliessen.

I2C Pin 1,3 sind SCL, SDA
2,4,... GND
5,7 5V

schließ GND und 5V an (und kein SCL, SDA ), dann kommt die GUI hoch.

gruß

prospam
03.02.2005, 13:06
Aber da wir schon dabei sind ... brauche auch Hilfe damit :-s

Versuche mit dem ATmega64 zu kommunizieren.
Er als Master, PC als Slave.

Master muß kennen:
// General TWI Master staus codes
#define TWI_START 0x08 // START has been transmitted
#define TWI_REP_START 0x10 // Repeated START has been transmitted
#define TWI_ARB_LOST 0x38 // Arbitration lost

// TWI Master Transmitter staus codes
#define TWI_MTX_ADR_ACK 0x18 // SLA+W has been tramsmitted and ACK received
#define TWI_MTX_ADR_NACK 0x20 // SLA+W has been tramsmitted and NACK received
#define TWI_MTX_DATA_ACK 0x28 // Data byte has been tramsmitted and ACK received
#define TWI_MTX_DATA_NACK 0x30 // Data byte has been tramsmitted and NACK received

// TWI Master Receiver staus codes
#define TWI_MRX_ADR_ACK 0x40 // SLA+R has been tramsmitted and ACK received
#define TWI_MRX_ADR_NACK 0x48 // SLA+R has been tramsmitted and NACK received
#define TWI_MRX_DATA_ACK 0x50 // Data byte has been received and ACK tramsmitted
#define TWI_MRX_DATA_NACK 0x58 // Data byte has been received and NACK tramsmitted

/////////////////////// TWI ////////////////////////////////////
// Setze Baudrate ??? Baud bei 8 MHz
// Berechnet sich aus: Baudrate = CLK / ( 16+2*(TWBR)*4^(TWPS) )
TWBR = 145; // Bit Rate Register
// Control Register
TWCR |= (1<<TWEN); // Aktiviere TWI
TWCR |= (1<<TWIE); // aktiviere den TWI-Interrupt
TWCR |= (1<<TWINT);
// TWI Status (Bit 7..3) und Prescaler (Bit(1..0)
TWSR = 0x02; // TWPS = 0

und dann aus dem handbuch:

TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); // Send START Cond
while ( !(TWCR&(1<<TWINT) ) ); // Wait TWINT Flag set

// Check Bus Status : 0x08 // START has been transmitted
if ( (TWSR & 0xF8) != TWI_START )
TWI_ERROR();

TWDR = ( (113 << 1) & 0xFE ); // SLA_W // Load Slave Adress
TWCR = (1<<TWINT) | (1<<TWEN); // Transmit Adress
while ( !(TWCR&(1<<TWINT) ) ); // Wait TWINT Flag set

// Check Bus Status : 0x18 // SLA+W has been tramsmitted and ACK received
// 0x20 // SLA+W has been tramsmitted and NACK
received
if ( (TWSR & 0xF8) != TWI_MTX_ADR_ACK )
TWI_ERROR();

Bekomme an diese Stelle keine Antwort von der PC Applikation, d.h. der TWSR status ist 0x20 !!!!

irgend welche ideen ?

danke im voraus

Frank
03.02.2005, 13:22
hast du denn dafür auch eine PC-Slave Software geschrieben? Das mitgelieferte Demo ist nur für den Masterbetrieb gedacht. Eine Slave-Software müsstest du selbst schreiben. Da VB für SLave-Software ein wenig langsam ist, wäre Assembler oder C beim PC in diesem Fall günstiger

prospam
03.02.2005, 17:06
Tja, hab's zuerst falsch interpretiert...
Empfangen heißt ja im master mode abfragen.

Versuche jetzt den ATmega64 so zu konfigurieren das er als Slave antwortet. Habe dazu eine Atmel Applikation gefunden: AVR312 (Slave) und AVR315 (Master).

dann ... selbst schreiben ... na ja ... ;)
Diese SW-Komponente ist MSCOMM32.OCX ?

Wie groß ist eigentlich die SCL der PC Bsp.-Applikation?
~2KHz (2400 Baud) ?

gruß

Frank
05.02.2005, 10:19
MSCOMM32.OCX ist die normale VB6 Komponente um den COM Port zu nutzen!
Wie hoch die Geschwindigkeit bei dem Visal Basic Demo ist weiss ich nicht, ich habs nicht überprüft. Wenn PC Master ist, ist geschwindigkeit ja oft nebensächlich (je nachdem was man steuert). Man kann die natürlich erhöhen indem man den COM-Port direkt anspricht bzw. das in C oder Assembler umsetzt. Da gibts auch schon DLL´s und Code im Netz, ich glaub die Webadresse hatte ich im Schaltplan in der Doku irgendwo angegeben.
Aber zum testen ist das VB-Programm immer am übersichtlichsten, find ich.

prospam
07.02.2005, 11:37
O.K. PC-Test als Master, AVR als Slave tut.
Cool 8) , danke :D .

Anmerkung:
Die Slave-ID der GUI ist eigentlich der SLA+W bzw. SLA+R Byte, d.h. SlaveAdresse * 2 + Read_not_Write.

Problem:
http://home.welfen-netz.de/IngoGerlach/i2c_ser/i2c_seriell.html
ist zur zeit nicht erreichbar. Ich denke das ist der link, den du meinst.

Hat jemand i2c-01.zip bzw. i2c-01_nt.zip vorher runtergeladen ?

gruß