Kennst sich hier einer mit VHDL aus?

BOcnc

User
Hallo,

ich habe mir eine Ansteuerung für LEDs gebaut mit einem cPLD.
Da ich mich mit VHDL nicht wirklich auskenne könnte ich etwas hilfe gebrauchen.
Das Programm ist fertig und funktioniert auch im Prinzip. Nur werden sporadisch einzelne LEDs nicht angesteuert.

gruß
Werner
 

BOcnc

User
Hallo,

das ist für einen Lattice LC4064 mit ispLEVER übersetzt.
Ansteuerung für ein Rotorblatt mit 20 MHz SPI mit einem PIC32.
An der Ansteuerung kann es wahrscheinlich nicht liegen weil ich die schon länger mit anderen ICs benutze.

Das Schieberegister geht. Aber die Daten werden wahrscheinlich nicht richtig mit dem SET Signal übernommen.

Der Rest scheint auch wieder zu gehen. (3 Bit PWM)

Das in den Bild die Zeilen aussen fehlen ist ein anderes Problem.

gruß
Werner


Anhang anzeigen rotorblatt.txt
 

Anhänge

  • rotor.jpg
    rotor.jpg
    107 KB · Aufrufe: 25
  • vogel11.jpg
    vogel11.jpg
    139,5 KB · Aufrufe: 29

BOcnc

User
Hallo Thomas,

vielen Dank.

Ich muss leider erst eine neue Leiterplatte bestücken weil meine schon eingebaut sind. In 14 Tagen wollen wir damit fliegen.


Das habe ich jetzt noch nicht verstanden.

-- if (Qreg = "111") then -- das passiert oben automatisch, darf hier nicht stehen da nicht synchron zu Z !
-- Qreg <= "000";
-- end if;


der Zaehler soll nur von 0 bis 6 zählen. bei 7 wieder zurück gesetzt werden.
Das scheint aber auch so zu funktionieren weil ich kein Problem mit der PWM habe.

gruß
Werner
 

thofi

User
Hallo Werner,

oh, da war ich etwas zu schnell, funktioniert wohl, ich würde es dann so schreiben

if rising_edge (Z) then
if (Qreg = "110") then
Qreg <= "000";
else
Qreg <= Qreg + 1;
end if;
end if;

Gruß
Thomas
 

BOcnc

User
Hi,

danke.

Ich glaube da geht noch mehr nicht.
"Set" kann ich erst verwenden wenn SPI fertig ist weil ich den letzen Takt vom SPI nicht kenne. Geht ja beim µP automatisch.
Da kommt dann kein Takt mehr.

begin
process (SCL)
begin
if (faling_edge(SCL)) then !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(Set='0') then
data <= shift;
else
shift <= shift(22 downto 0) & SDI; -- left shift
-- shift <= SDI & (shift(23 downto 1); -- right shift
endif;
endif;
end process;

SCLo <= SCL;
SDO <= shift(23);
end RTL;
 

BOcnc

User
Ansteuerung vom µP

void Lauflicht(void)
{
DWORD b;
DWORD indexd;
WORD dat;
zeit = 0;

while(lauflichtan)
{
indexd = 0;
for (a = 0; a < lauflichtdaten.ZeilenLauflicht; a++)
{
for (b = 0; b < lauflichtdaten.DatenZahl; b++)
{
while(SPI3STATbits.SPITBF == 1){}

SPI3BUF = lauflichtdaten.buffer[indexd]; indexd++;
}

while(SPI3STATbits.SPIBUSY == 1) {}

PORTDbits.RD7 = 1; // SET
PORTDbits.RD7 = 0; // SET

while (!neueZeile)
{
if (nopulslang < Bildan)
{
Puls = FALSE;
lauflichtan = FALSE;
return;
}
}
neueZeile = FALSE;
}
}
}
 
Ansicht hell / dunkel umschalten
Oben Unten