pascalbythree
Delphi WIN10 / www.freepascal.org AVR Pascal / www.freepascal.org RPI /
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
Hoeben
Golden Member
https://www.hoeben.com https://www.overstockdevices.com https://www.asensor.eu https://www.circuitsonline.net/forum/user/4355#aanbod Voor alle verkoop: een tegenbod is altijd welkom!
Als je eerst eens het probleem beschrijft wat je hebt?
Hij doet gewoon helemaal niets? Zie dan de post van Bobosje.
pascalbythree
Delphi WIN10 / www.freepascal.org AVR Pascal / www.freepascal.org RPI /
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%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
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...)
pascalbythree
Delphi WIN10 / www.freepascal.org AVR Pascal / www.freepascal.org RPI /
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%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
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.