Beste mensen van CO.

Na lang werken aan dit project, doet deze programmer het. In de behuizing zit een RPI4 en 2 USB hubs van sitecom. Hieraan totaal 6 USB programmers voor SPI/AVR

Verder telt deze behuizing nog 3 logische switch boards, om te kiezen welke programmer en te switchen van CHANNEL1 en CHANNEL2

Op basis van een 4066 logisch IC.

Dus als u goed op de foto IMG_1428 kwijt, ziet u 2 flat cables voor CH1 en CH2, links en rechts naast het TFT display.

Draaiend van een oude 12V laptop adapter.

Dit systeem word gestuurd door een terminal app in freepascal 3.3.1 samen met een delphi 10 client applicatie.

breadboardje:

Dit is een foto van mijn breadboardje, met links en rechts een ATMEGA328P
Ze hangen aan elkaar met 2 stuks 10K, met de SDA en de SCl

Code in notepad++ links en rechts:

De code van de I2C UNIT:


unit i2c;

interface

type
  { TI2CMaster }
  TI2CMaster = object
    retVal: byte;
    procedure init(bitRate: byte);
    // Low level functions
    // Address should be left adjusted 7-bit value
    function start(address: byte; readTransaction: boolean): boolean;
    function readByte(out data: byte; ack: boolean): boolean;
    function writeByte(data: byte): boolean;
    function stop: boolean;

    // Higher level implementation
    function ReadByteFromReg(i2caddress, regAddress: byte; out data: byte): boolean; overload;
    function ReadBytesFromReg(i2caddress, regAddress: byte; data: PByte; size: byte): boolean; overload;
    function ReadBytes(i2caddress: byte; const data: PByte; size: byte): boolean; overload;

    function WriteByteToReg(i2caddress, regAddress: byte; const data: byte): boolean; overload;
    function WriteBytesToReg(i2caddress, regAddress: byte; data: PByte; size: byte
      ): boolean; overload;
    function WriteBytes(address: byte; const data: PByte; size: byte): boolean;

    // data pointer should be pointer to flash memory
    function WriteBytesToReg_P(i2caddress, regAddress: byte; data: PByte; size: byte
      ): boolean;

    function clearStalledBus: boolean;
  end;

Freepascal CODE voor linker channel:


program WVW_LEFT;

uses
 i2c, delay;
 
  procedure ModePortB(Pin: byte; Value: Boolean);
  begin
    if Value then 
      begin
        DDRB := DDRB or (1 shl pin);
      end
    else 
      begin
        DDRB := DDRB and not (1 shl pin);
      end;
  end;

procedure WritePortB(Pin: byte; Value: Boolean);
  begin
    if Value then 
      begin
        PORTB := PORTB or (1 shl pin);
      end
    else 
      begin
        PORTB := PORTB and not (1 shl pin);
    end;
  end;
  
const  AddressI2C = $68;

var
  i2c_master: TI2CMaster;
  i, wb ,data: byte;
  S:String;
  C:Char;  
  
begin
  i:=0;
  wb:=0;
  data:=0;
  S:=' ';
  C:=' ';  
  
  ModePortB(1, TRUE); // Status LED to output
  
  i2c_master.init(I2C_50kHz);
  
  S := 'Hello World!';
  
  repeat
     inc(i);
	 if i = 12 then i:=1;

     i2c_master.start(AddressI2C,I2C_WriteMode);    
	 wb := Ord(S[i]);
	 i2c_master.writeByte(wb);
     i2c_master.stop;	 
	 
	 WritePortB(1,True);  // Status LED OFF
	 delay_ms(20);
	 WritePortB(1,False); // Status LED ON
	 delay_ms(20);	 
  until 1=2;	 
end.

Freepascal CODE voor rechter channel:


program LCDtest;

uses lcd_config, lcd_hd44780, delay, i2c;
 
  procedure ModePortB(Pin: byte; Value: Boolean);
  begin
    if Value then 
      begin
        DDRB := DDRB or (1 shl pin);
      end
    else 
      begin
        DDRB := DDRB and not (1 shl pin);
      end;
  end;

procedure WritePortB(Pin: byte; Value: Boolean);
  begin
    if Value then 
      begin
        PORTB := PORTB or (1 shl pin);
      end
    else 
      begin
        PORTB := PORTB and not (1 shl pin);
    end;
  end;

    function IntToStr(const i: Integer): string;
    begin
     Str(i, Result);
    end;
     
    function StrToInt(const s: string): Integer;
    var
     code: Integer;
    begin
     Val(s, Result, code);
    end;  

const  AddressI2C = $68;

var
  i2c_master: TI2CMaster;
  i, Data: Byte;
  C:Char;  
  S:String;  

begin 
  i:=0;
  C:=' ';
  S:=' ';
  Data := 0;
  
  ModePortB(1, TRUE); // Status LED to output
  
  lcd_init(lcd_displayOnCursorOnCursorBlink);
  lcd_clrscr;
  
  i2c_master.init(I2C_50kHz);
  
   repeat
    inc(i);
    if i = 12 then begin i:=1; S:=''; lcd_clrscr; end;
	 
    i2c_master.start(AddressI2C,I2C_ReadMode);
    i2c_master.ReadByte(Data,False);
	i2c_master.stop;
	S := S + Chr(Data);
	
	lcd_gotoxy(1, 1); // Display 
    lcd_puts(S); // Send string to Display
		 
	 WritePortB(1,True); // Status LED OFF
	 delay_ms(20);
	 WritePortB(1,False); // Status LED ON
	 delay_ms(20);
  until 1=2;
end.

Nu is de vraag :) of iemand mij kan helpen deze 2 stukken freepascal code te debuggen, zodat de texten verschijnen over I2C op het lcd_hd44780 display
aan de rechter kant van het breadboardje.

Krijg ik jullie gek genoeg ? Groet, PascalByThree, Wouter van Wegen

PS: De MCUs draaien allebij op 8MHZ

In de "unit i2c" staat alleen het "interface" deel beschreven.
Zonder beschrijving van het "implementation" deel in de "unit i2c" doet deze unit verder helemaal niets.

Voor meer info zie hier: https://wiki.freepascal.org/Unit

Als je eerst eens het probleem beschrijft wat je hebt?

Hij doet gewoon helemaal niets? Zie dan de post van Bobosje.

bovenstaand project doet het volledig, bedoelde u dat?

'K zoek gewoon een gabber die mij ff kan helpen debuggen, dan op de AVR

https://github.com/ccrause/fpc-avr/blob/master/src/library/i2c.pas

[Bericht gewijzigd door pascalbythree op (22%)]

Op 23 september 2023 13:07:53 schreef pascalbythree:
bovenstaand project doet het volledig, bedoelde u dat?

'K zoek gewoon een gabber die mij ff kan helpen debuggen, dan op de AVR

Als het volledig werkt, wat valt er dan te debuggen?
(trouwens, volgens mij lijkt me die code ook niet compleet...)

Hij Doet het! Dank jullie zeer ! Stiekum vanaf een ander forum. :-)

Groet WvW

Nu kan deze man I2C'en

[Bericht gewijzigd door pascalbythree op (14%)]

Op 26 september 2023 14:10:06 schreef pascalbythree:
Hij Doet het! Dank jullie zeer ! Stiekum vanaf een ander forum. :-)

??
Wij hebben niks gedaan.
Dat kan ook niet zonder enige nuttige informatie te verstrekken...

Op 26 september 2023 14:10:06 schreef pascalbythree:
Hij Doet het! Dank jullie zeer ! Stiekum vanaf een ander forum. :-)

Hmmm ok, nuttig topic.