Sterrenhemel

Dit topic is gesloten

Bavelt

Golden Member

Ik lees hier veel mogelijkheden, in verschillende complexiteit.
Dank aan de inzenders!

De kunst is om het in principe wat eenvoudiger te houden. Ik kan bv ook de platen met 8*8 ledjes maken.

Dan zou iedere plaat met een MAX7219 kunnen worden aangestuurd.
Nu zag ik op internet een filmpje van iemand die een 'random' ledjespatroon laat branden met een Max7219 en een 8*8 matrix led.

http://blog.podkalicki.com/attiny13-random-flickering-pixels-on-8x8-ma…

Ik werk nu al een poosje met MikroBasic en diverse PIC's, maar hoe zou ik hiermee iets dergelijke kunnen maken? Ik kan wel karakters, etc op de matrix krijgen. Maar een random beeld..?

Fouten zijn het bewijs dat je het probeert..

Op 27 oktober 2020 14:41:56 schreef Arco:
Dat schiet zijn doel wat voorbij... ;)
Nodeloos gecompliceerd en volgens mij is dat er niet met witte leds. (goed, je kunt met RGB bij benadering wit krijgen maar 't blijft behelpen)

Jawel, er zijn varianten met koud of warm witte LEDs als 4de kleur. Je hoeft dan alleen elke LED van voeding en ground te voorzien, en de datalijn trek je van de ene LED naar de andere. Het zijn iets meer aansluitingen, maar voeding en ground is voor allemaal hetzelfde, en je hebt volledige controle over de kleur van elke LED. Eventueel zou je de achterkant kunnen beplakken met koperfolie en dat als ground gebruiken.

Ik weet uit ervaring dat het niet nodig is om de LEDs ontkoppelcondensators te geven.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

toeval wil dat ik volgende week ook aan derlijke begin. alleen moet HEEL DE ZOLDER vol met zulke panelen komen.

ik had ook al aan WS2812 leds gedacht, omdat ik dan van paneel naar paneel kan doorschakelen (12V over dikke lijnen doorlussen, datalijnen serieel achter elkaar koppelen.

en dan een simpel programma in arduino die de ledjes zachtjes laat fonkelen.

maar die losse chips waar ik per chip 3 leds mee kan aansturen lijkt me ook wel wat.
door 1 RGB waarde door te geven, gaan er direct 3leds verschillend gaan branden. bespaard me wel een pak code dan

ik hou van werken ..., ik kan er uren naar kijken

@fcapri, ik heb ze toegepast in een project waar ik veel leds moest aansturen, maar dan van 1 kleur. Ook later nog een paar leds toevoegen is geen probleem.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Bavelt

Golden Member

Ik ben al een eindje verder: In MikroBasic zit een functie die een random nummer genereert: Rand().
Door dit nummer naar de rijen en kolommen in de matrix te sturen, krijg je een random effect op de LED Matrix.

Dit Programma is nu even met 1 matrix, maar simpel uit te breiden naar 8 stuks.
Het enige waar ik nog mee zit, is dat er - vanwege het random getal - er net iets teveel sterren tegelijk veranderen.
Ik zoek nog iets om het aantal wijzigingen kleiner te houden.

pic basic code:

Program Sterrenhemel
'Display Matrix Led 8 * 8, type 1088AS

Dim ClockPin   as sbit at LATB.4        'pin 10
    Latch      as sbit at LATB.3        'pin 9
    Datapin    as sbit at LATB.2        'pin 8

    Light      as Byte                  'Intensity
    Row        as Byte
    j1         as Byte
    RandNum    as Byte[8]

'===============================================================================
Sub Procedure Max_Write(Dim pRow, pDig0 as Byte)
'===============================================================================
 Latch = 0
 SPI1_Write(pRow)
 SPI1_Write(pDig0)
 Latch = 1
 Delay_ms(1)
End sub

'===============================================================================
Sub Procedure Max7219_Init()
'===============================================================================
Max_Write(0x09, 0x00)
Max_Write(0x0B, 0x07)
Max_Write(0x0C, 0x01)
Max_Write(0x0A, 0x00)
End sub

'===============================================================================
Sub Procedure Display_Testen()      'Testen van het display; alle LEDS aan
'===============================================================================
Max_Write(0x0F, 0x01)
DELAY_MS(50)
Max_Write(0x0F, 0x00)
DELAY_MS(50)
End sub

'===============================================================================
Sub Procedure Uitzetten_Leds()      'Leds uitzetten per Row
'===============================================================================
FOR Row = 1 to 8
   Max_Write(Row, 0x00)
   delay_ms(50)
NEXT Row
End sub

'===============================================================================
Main:

'===============================================================================
  OSCCON     = %01110000                                      '8Mhz internal
  ANSELA     = %00000000                                      'Port %   digital
  ANSELB     = %00000000                                      'Port %   digital
  TRISA      = %11111111
  TRISB      = %00000000
  PORTA      = %11111111
  SPI1_Init()
  Max7219_Init()
  Display_Testen()
  delay_ms(500)
  Uitzetten_Leds()

  While True
    For j1 = 0 to 7
     RandNum[j1] = rand()
     Delay_ms(5)
    Next j1
    For Row = 1 TO 8
      Max_Write(Row, RandNum[Row -1])
    Next Row
    Delay_ms(10000)
  Wend
  
  End.
Fouten zijn het bewijs dat je het probeert..

.

[Bericht gewijzigd door pe5ocb op vrijdag 30 oktober 2020 12:57:38 (100%)

Bavelt

Golden Member

Ziet er erg mooi uit.
Ik heb totaal geen ervaring met glasfibers. Hoe je de lichtbron erop zet; war je die dingen koopt, etc.

Is daar ergens een leuk artikeltje voor?

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Op 27 oktober 2020 14:29:01 schreef Arco:
Een HT16K33 kan een 16x8 matrix aansturen...

Maar wat ik ervan begrijp is dat deze ook per rij of kolom de LEDS aanstuurt.
Je kan dus niet de LEDS individueel aansturen?

Dit ivm dat je de leds per stuk wilt laten faden.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Je kunt de leds individueel aansturen, maar niet faden (daar was ook geen sprake van tot nu toe...). Je kunt alleen alle leds tegelijk faden.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

een jaar of 20 terug waren die sterrenhemels nogal in. toen werden die al met glasvezel gemaakt, maar ik heb ze ook gezien met enige honderden halogeenpitjes, boven een zwembad. dat was al ouder, denk begin 90's.

die setjes met glasvevel en unit waar een lamp inzit waren er toen ook al, een 50W halogeenspotje zat erin. ledspotje erin steken en je hebt er geen onderhoud meer aan. doorgaans waren die setjes ruim met de glasvezels, waar ik ze heb gezien lag nog een flinke bos vezels op het plafond getayrapt.

waar rook was, werkt nu iets niet meer

.

[Bericht gewijzigd door pe5ocb op vrijdag 30 oktober 2020 12:57:59 (100%)

Bavelt

Golden Member

Ik ben zelf ook weer een stap verder!

Met gebruikmaking van de Graycode, kan ik iedere keer slechts ëen ledje laten veranderen. Iedere kolom heeft zijn 'eigen' Graywaarde, die steeds wordt verhoogd of verlaagd. Door de kolommen random te kiezen, ontstaat er ook een willekeurige volgorde van wijziging.

pic basic code:

Program Sterrenhemel
'Display Matrix Led 8 * 8,% type 1088AS

 Const GrayCode as byte[255] = (
%00000000,%00000001,%00000011,%00000010,%00000110,%00000111,%00000101,%00000100,
%00001100,%00001101,%00001111,%00001110,%00001010,%00001011,%00001001,%00001000,
%00011000,%00011001,%00011011,%00011010,%00011110,%00011111,%00011101,%00011100,
%00010100,%00010101,%00010111,%00010110,%00010010,%00010011,%00010001,%00010000,
%00110000,%00110001,%00110011,%00110010,%00110110,%00110111,%00110101,%00110100,
%00111100,%00111101,%00111111,%00111110,%00111010,%00111011,%00111001,%00111000,
%00101000,%00101001,%00101011,%00101010,%00101110,%00101111,%00101101,%00101100,
%00100100,%00100101,%00100111,%00100110,%00100010,%00100011,%00100001,%00100000,
%01100000,%01100001,%01100011,%01100010,%01100110,%01100111,%01100101,%01100100,
%01101100,%01101101,%01101111,%01101110,%01101010,%01101011,%01101001,%01101000,
%01111000,%01111001,%01111011,%01111010,%01111110,%01111111,%01111101,%01111100,
%01110100,%01110101,%01110111,%01110110,%01110010,%01110011,%01110001,%01110000,
%01010000,%01010001,%01010011,%01010010,%01010110,%01010111,%01010101,%01010100,
%01011100,%01011101,%01011111,%01011110,%01011010,%01011011,%01011001,%01011000,
%01001000,%01001001,%01001011,%01001010,%01001110,%01001111,%01001101,%01001100,
%01000100,%01000101,%01000111,%01000110,%01000010,%01000011,%01000001,%01000000,
%11000000,%11000001,%11000011,%11000010,%11000110,%11000111,%11000101,%11000100,
%11001100,%11001101,%11001111,%11001110,%11001010,%11001011,%11001001,%11001000,
%11011000,%11011001,%11011011,%11011010,%11011110,%11011111,%11011101,%11011100,
%11010100,%11010101,%11010111,%11010110,%11010010,%11010011,%11010001,%11010000,
%11110000,%11110001,%11110011,%11110010,%11110110,%11110111,%11110101,%11110100,
%11111100,%11111101,%11111111,%11111110,%11111010,%11111011,%11111001,%11111000,
%11101000,%11101001,%11101011,%11101010,%11101110,%11101111,%11101101,%11101100,
%11100100,%11100101,%11100111,%11100110,%11100010,%11100011,%11100001,%11100000,
%10100000,%10100001,%10100011,%10100010,%10100110,%10100111,%10100101,%10100100,
%10101100,%10101101,%10101111,%10101110,%10101010,%10101011,%10101001,%10101000,
%10111000,%10111001,%10111011,%10111010,%10111110,%10111111,%10111101,%10111100,
%10110100,%10110101,%10110111,%10110110,%10110010,%10110011,%10110001,%10110000,
%10010000,%10010001,%10010011,%10010010,%10010110,%10010111,%10010101,%10010100,
%10011100,%10011101,%10011111,%10011110,%10011010,%10011011,%10011001,%10011000,
%10001000,%10001001,%10001011,%10001010,%10001110,%10001111,%10001101,%10001100,
%10000100,%10000101,%10000111,%10000110,%10000010,%10000011,%10000001
)

Dim ClockPin   as sbit at LATB.4        'pin 10
    Latch      as sbit at LATB.3        'pin 9
    Datapin    as sbit at LATB.2        'pin 8

    Light      as Byte                  'Intensity
    Row        as Byte
    d1         as Byte [8]
    j1         as Byte
    RandNum    as Integer
    
'===============================================================================
Sub Procedure Max_Write(Dim pRow, pDig0 as Byte)
'===============================================================================
 Latch = 0
 SPI1_Write(pRow)
 SPI1_Write(pDig0)
 Latch = 1
 Delay_ms(1)
End sub

'===============================================================================
Sub Procedure Max7219_Init()
'===============================================================================
Max_Write(0x09, 0x00)
Max_Write(0x0B, 0x07)
Max_Write(0x0C, 0x01)
Max_Write(0x0A, 0x00)
End sub

'===============================================================================
Sub Procedure Display_Testen()      'Testen van het display; alle LEDS aan
'===============================================================================
Max_Write(0x0F, 0x01)
DELAY_MS(50)
Max_Write(0x0F, 0x00)
DELAY_MS(50)
End sub

'===============================================================================
Sub Procedure Uitzetten_Leds()      'Leds uitzetten per Row
'===============================================================================
FOR Row = 1 to 8
   Max_Write(Row, 0x00)
   delay_ms(50)
NEXT Row
End sub

'===============================================================================
Main:

'===============================================================================
  OSCCON     = %01110000                                      '8Mhz internal
  ANSELA     = %00000000                                      'Port %   digital
  ANSELB     = %00000000                                      'Port %   digital
  TRISA      = %11111111
  TRISB      = %00000000
  PORTA      = %11111111
  SPI1_Init()
  Max7219_Init()
  Display_Testen()
  delay_ms(500)
  Uitzetten_Leds()
  Light = 1
  
d1[0] = 11                                                         'Startwaardes voor Gray per Row
d1[1] = 35
d1[2] = 73
d1[3] = 113
d1[4] = 167
d1[5] = 189
d1[6] = 211
d1[7] = 234

  For Row  = 1 to 8                                               'Initieel vullen van alle rijen
    Max_Write(Row, GrayCode[d1[Row - 1]])
  Next Row

  While True                                                      'Loop
    Randnum = Rand()
    Row = Randnum / 4000
    If Row < 1 Then Row = 1 End if
    if Row > 8 Then Row = 8 End if
      Max_Write(Row, GrayCode[d1[Row - 1]])
      Select case Row
      Case 1, 3, 5, 7                                             'Oneven rijen tellen op
        d1[Row -1] = d1[Row - 1] + 1
        If d1[Row - 1] > 255 Then d1[Row - 1] = 0 End if
      
      Case 2,4,6,8                                                'Even rijen tellen af
        d1[Row -1] = d1[Row - 1] - 1
        If d1[Row - 1] = 0 Then d1[Row - 1] = 255 End if
      End select
      Delay_ms(1000)
  Wend
  
  End.]
Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik zit nog even met een goede 'truc' om een random getal te produceren van bijv 1 tot 4.

In MikroBasic levert i1=rand() een getal tussen 0 en 32767.

Nu kan je dit resultaat wel delen door 8192, en bij uitkomst 0 er = 1 van maken, maar dan krijg je volgens mij geen zuivere random waarde waarbij de kans dat je 1, 2, 3 of 4 krijgt even groot is.

Of is daar een andere truc voor?

Fouten zijn het bewijs dat je het probeert..

neem de rest waarde.
laat je random een getal geven tussen 0 en 32000, bv 16893.
deel dat door 5
de restwaarde is dan je waarde. hier dus 3.
is de uitkomst 0, laat je de random nog eens lopen

of, je deelt door 4, en neemt de rest + 1. bij die 16893 heb je dan nu een 2.
in C heb je daar de functie % voor
16893%5 = 3
16893%4 = 2 (2+1 = 3)

ik hou van werken ..., ik kan er uren naar kijken

Op 27 oktober 2020 18:02:36 schreef Bavelt:
[...]

Wat grappig!
Goed idee om de platen met een regelwerk te verbinden en dan als één geheel op te hangen. ;)
Heb je hier ook zachtboard voor gebruikt?

Hoe werkt nu zo'n Wartel met Fiber? Op de foto gaan er een hoop draadjes in zo'n motor-achtig dingetje...

Dit waren gewoon MDF platen, op de kamer zelf gebouwd/geschilderd etc en heel veel gaatjes geponst met een ijzer staafje, wel een pokkewerk.

Die motor-achtige dingetjes zijn geen motortjes oid, dan zijn grote wartels waarin de fibers samenkomen en met een beugeltje is er een RGB led achter gezet, elke wartel zijn eigen led die volledig onafhankelijk aan te sturen is.

Bavelt

Golden Member

.

[Bericht gewijzigd door Bavelt op zaterdag 31 oktober 2020 23:04:46 (99%)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Op 27 oktober 2020 14:29:01 schreef Arco:
Een HT16K33 kan een 16x8 matrix aansturen...

Een MAX7219 kan 8*8 leds aan. Mag ik dat zo zien dat twee MAX7219's hetzelfde effect hebben als één HT16K33?
Ik heb nl nog best wat van die 7219's hier liggen.

[Bericht gewijzigd door Bavelt op zaterdag 31 oktober 2020 23:04:35 (98%)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Als ik nu een afstandsediening wil maken om het geheel te bedienen, bv helderheid, patroon, aan/uit, wat is dan daarvoor een geijkte of geschikte methode?

Via Bluetooth, or IR-sensor?

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik heb nog een vreemd probleem.

De combinatie met een MAX7219 en een Bluetooth moduuljte (HC06) geeft problemen bij een MIKRO Basic programma.

Ik heb 8 LED-Matrixen 8*8, ieder voorzien van een MAX7219 aan de PIC16F1847 hangen.

Ik gebruik hiervoor de de volgende poorten:

'Display LED as Matrix: 22 Rows and 22 Columns
'Bluetooth Module HC-06 or JDY-31
'Processor: PIC16F1847
'TX at Port B.5 pin 11 Connect to Rx of BT-Device via Divider to 3.3 V
'RX at Port B.1 pin 7 Connect to Tx of BT-Device
'
'SPI for MAX7219:
'ClockPin at PortB.4 pin 10
'Latch at Port B.3 pin 9
'Data at PortB.2 pin 8

Het probleem ontstaat zodra de UART_Init() wordt uitgevoerd in MikroBasic.
Het effect is dat alle leds van alle matrixen spontaan aan gaan (en ook niet meer uitgaan) bij de eerste de beste SPI-schrijf opdracht (bv de init).

Ergens zit die UART het SPI protocol in de weg in deze PIC.
Maar ik zie het niet... :?

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik ben er al uit.
APFCON1 vergeten, om TX aan Port B.5 te koppelen.

Ander spakt hij standaard B.2 en daar zit de SPI op...

Fouten zijn het bewijs dat je het probeert..
marcob

Golden Member

Met project zoals dit, een sterren hemel, zou ik eerst beginnen met de sterren hemel zelf. Eerst zelf een goede werkbare oplossing kiezen, dus glas fiber of losse led's. Hierna pas de aansturing en software, die is namelijk afhankelijk van de oplossing.

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years

Ik zou een testopstelling maken, om te zien of je genoeg licht uit zo'n LED krijgt om via glasvezels te verdelen wanneer je een dergelijke multiplexer gebruikt, dus ik snap de TS wel.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Lambiek

Special Member

Eerst hard en software voor elkaar maken, het mechanische gedeelte is het simpelste gedeelte.

Als je haar maar goed zit, GROETEN LAMBIEK.
marcob

Golden Member

@ SpatkyGSX & @Lambiek

Dit bedoel ik ook eerst de basis testopstelling, mechanische keuze, glasfiber of losse leds. Ik bij de TS vragen opkomen van problemen met de programmering, Bluetooth enz.

En als ik nog wat mag toevoegen :-)
Persoonlijk zou ik kijken in de richting van een ESP32. Heeft naast WiFi en Bluetooth, ook de mogelijkheid om de programmering van IP (WiFi-OTA) te doen. Wel zo makkelijk als de module straks aan het plafond zit.

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years
Bavelt

Golden Member

Op 2 november 2020 12:52:54 schreef marcob:
@ SpatkyGSX & @Lambiek

Dit bedoel ik ook eerst de basis testopstelling, mechanische keuze, glasfiber of losse leds. Ik bij de TS vragen opkomen van problemen met de programmering, Bluetooth enz.

En als ik nog wat mag toevoegen :-)
Persoonlijk zou ik kijken in de richting van een ESP32. Heeft naast WiFi en Bluetooth, ook de mogelijkheid om de programmering van IP (WiFi-OTA) te doen. Wel zo makkelijk als de module straks aan het plafond zit.

Klopt. Ik heb zelf voorlopg de keuze gemaakt om met losse leds te werken. Dat is wellicht wel meer werk, maar ook wel weer leuk om te doen.
Ik heb de programmering nu vwb de sterren wel goed. Bij de start wordt er een 'sterrenhemel' gegenereerd. Vervolgens komt er steeds een 'ster' op of gaat er eentje onder. Dat doe ik door gebruik te maken van de Gray-Code, waardoor er steeds maar 1 bitje tegelijk verandert. na verloop van tijd ziet de sterrenhemel er dus totaal anders uit.

Het geheel gaat bestaan uit 9 panelen zachtboard van 120 * 60 cm, via een raamwerk aan elkaar te zetten, met in totaal 22 rijen en en kolommen.
Dus in totaal 22*22 = 484 ledjes, van 3mm (5mm vond ik toch te groot).

Dan heb ik nog als 'extraatje' een aantal ledjes die oranje kleuren. Dat is dan de planeet Mars, die af en toe verschijnt en langzaam door de sterrenhemel dwaalt (deze wel in een vast patroon).

Qua software gebruik in MikroBasic en erg leuk om te doen. Als test (de hemel zelf wordt in het laatste stadium gebouwd) gebruik ik LED Matrixjes van 8*8. De processor is een PIC16F1847, die alles in zijn eentje aankan.
De LEDs worden aangestuurd door een achttal MAX7219's. Dat werkt prima.

Maar inderdaad, ik worstel nog een beetje met hoe ik het bedien. Als het ding aan het plafond hangt, kun je er niet meer bij.
Ik kan met bluetooth (module HC06) commando's ingeven, maar ik heb er dan wel een smartphone bij nodig. Daar heb ik dan de Serial BT App op staan.

Mijn vraag ik eigenlijk: kan je ook een afstandbedienig maken met ook een BT-module? Maar hoe koppel je die dan? Nu gebeurt dat door op de smartphone de koppeling te bewerkstelligen.
Maar kan dat ook rechtstreeks zonder tussenkomst van een ander apparaat?

En ook heb ik gedacht aan wat MarcoB zegt: het programmeren op afstand (anders moet ik een lange kabel voor de ISP monteren wat natuurlijk niet fraai is.)
Ik heb een keer geëxperimenteerd met een ESP32, maar de WIFI lukte me niet zo goed. Wellicht dat ik daar wat meer tijd in met steken.

Fouten zijn het bewijs dat je het probeert..

Dit topic is gesloten