hallo co´ers

ik ben met een projektje bezig een lichtmeting en aan de hand van de lichtmeting een rgb led laten branden .
nu heb ik een proefje gemaakt en ze deze werkt wel en het echte werkt niet terwijl de prog bijna hetzelfde zijn
ik snap er niks van
dit is de proef


--JAL 2.1
--j.picocrie

include 16f877_bert
include lcd_44780

var bit led is pin_d0
var bit led1 is pin_d1
var bit led2 is pin_c3
--definities
pin_d0_direction = output
pin_d1_direction = output
pin_c3_direction = output

--define variables
var byte resist, history, counter

--set text
var byte Demo[5]={"l","i","g","h","t"}
counter = 0
for 5 loop
    LCD_char_line_pos(Demo[counter],0,counter)
    counter = counter + 1
end loop

--make history unequal to resist for first run
history = resist + 1

--switch the cursor off
LCD_cursor = on

forever loop
--convert analog on a4 to digital
resist = ADC_read_low_res(4)

--the light intensity has changed
if resist != history then

--display value(0-255)
LCD_num_line_pos(resist,0,6)

--show bar on lower line
LCD_progress(resist/ 16,1)

--led schakelen
if resist < 75 then
led = high
else led = low
end if
if resist == 100 then
led1 = high
else led1 = low
end if
if resist > 125 then
led2 = high
else led2 = low
end if
--remember the current value
history = resist

end if

end loop

en dit zou het resultaat moeten zijn


--JAL 2.1
--j.picocrie

include 16f877_bert
include lcd_44780

var bit ledrood is pin_d0
var bit ledblauw is pin_d1
var bit ledgroen is pin_c3
--definities
pin_d0_direction = output
pin_d1_direction = output
pin_c3_direction = output

--define variables
var byte resist, history, counter

--set text
var byte Demo[5]={"l","i","g","h","t"}
counter = 0
for 5 loop
    LCD_char_line_pos(Demo[counter],0,counter)
    counter = counter + 1
end loop

--make history unequal to resist for first run
history = resist + 1

--switch the cursor off
LCD_cursor = on

procedure leduit is
ledrood = off
ledblauw = off
ledgroen = off
end procedure

procedure wit is
ledrood = on
ledblauw = on
ledgroen = on
end procedure

procedure paars is
ledrood = on
ledblauw = on
end procedure

procedure lblauw is
ledblauw = on
ledgroen = on
end procedure

procedure geel is
ledrood = on
ledgroen = on
end procedure

forever loop
--convert analog on a4 to digital
resist = ADC_read_low_res(4)

--the light intensity has changed
if resist != history then

--display value(0-255)
LCD_num_line_pos(resist,0,6)

--show bar on lower line
LCD_progress(resist/ 16,1)

--led schakelen
leduit
if resist < 32 then wit end if
if resist == 64 then paars end if
if resist == 96 then ledblauw = on end if
if resist == 128 then lblauw end if
if resist == 160 then ledgroen = on end if
if resist == 192 then geel end if
if resist > 224 then ledrood = on end if

--remember the current value
history = resist

end if

end loop

ik snap het niet wie kan mij helpen
alvast heel hartelijk bedankt

[Bericht gewijzigd door Henry S. op (0%)]

Was even lastig te bepalen wat je had verandert zonder verdere beschrijving en ook wat er nu niet gebeurd.
Ik heb 1 ding gevonden waar het evt aan zou kunnen liggen nl gebruik eens 1 en 0 ipv on en off.
maar waarom het eerste programma niet gebruiken? zijn verder toch hetzelfde? maar misschien zie ik nog een verschil over het hoofd.

Vriendelijke groet,
Falcon

Bovenstaande zal al niet het probleem zijn.
on/off & high/low worden 'geparsed' naar 1/0

Misschien is het wel handig om te vertellen wat er juist niet werkt?
Je maakt geen gebruik van procedures meer, waardoor je een iets grotere puinhoop krijgt in je code.
Daarnaast heb je de procedures niet volledig goed vervangen... in principe moet je bij elke IF waarde al je leds een waarde toekennen (ookal is dat hetzelfde als de vorige, je weet het niet)

Maar als je niet zegt WAT er juist niet werkt, wordt het nogal moeilijk voor ons :)
'kheb zelf niet de software, compiler en libraries geinstalleerd om te kunnen testen of er compile errors zijn.
Ik ben overgestapt op Jallib (google it), zodat je wat meer vrijheid hebt (nu misschien nog niet nodig). Er zijn wel een paar fundamentele verschillen...

ps: inspringen na de 'forever loop' zou wel prettig zijn... minder zoekwerk naar waar je eigenlijke programma nu begint.

hallo co'ers

sorry voor een niet zo goede uitleg

ik gebruik een pic 16f877 met een ldr een lcd scherm en een rgb led
op het scherm komt de waarde van resist en een bar op de onderste regel

aan de hand van licht of donker wil ik de kleur van de led bepalen

in het eerste progje een proef werkt alles led geeft goede kleur en het scherm is aflees baar

in de tweede situatie kleurt de led groen of blauw en het scherm laat alleen blokjes zien en het lijkt te blokkeren

terwijl er in mijn ogen niet zoveel verandert is

groeten olan

De leds zou kunnen zijn door wat ik eerder zei. Je schrijft in elke mogelijkheid niet alle led kleuren weg.

Wat betreft het LCD display heb ik niet zo onmiddelijk een antwoord voor jou.

heb de suggesties aangepast in het programmma
maar geen resultaat
het lcd scherm geeft niks meer weer
en de led brandt continue de zelfde kleur

graag hulp


--JAL 2.1
--j.picocrie

include 16f877_bert
include lcd_44780

var bit led is pin_d0
var bit led1 is pin_d1
var bit led2 is pin_c3
--definities
pin_d0_direction = output
pin_d1_direction = output
pin_c3_direction = output

--define variables
var byte resist, history, counter

--set text
var byte Demo[5]={"l","i","g","h","t"}
counter = 0
for 5 loop
    LCD_char_line_pos(Demo[counter],0,counter)
    counter = counter + 1
end loop

--make history unequal to resist for first run
history = resist + 1

--switch the cursor off
LCD_cursor = on

forever loop
  --convert analog on a4 to digital
  resist = ADC_read_low_res(4)

  --the light intensity has changed
  if resist != history then

    --display value(0-255)
    LCD_num_line_pos(resist,0,6)
 
    --show bar on lower line
    LCD_progress(resist/ 16,1)

    --led schakelen
    if resist < 75 then
      led = high
    else
      led = low
    end if

    if resist == 100 then
      led1 = high
    else
      led1 = low
    end if

    if resist > 125 then
      led2 = high
    else
      led2 = low
    end if
  
    --remember the current value
    history = resist

  end if

end loop

Zo wordt het al iets leesbaarder... Nu weet ik niet wat jij veranderd hebt aan de nieuwe code. Heb je de code zelf al eens vergeleken?
Ik zie de fout niet direct.
Zie je de eerste lijn op het LCD scherm verschijnen?

Probeer eens stap voor stap je programma op te bouwen.
1. komt het programma goed zonder fouten aan in de pic?
2. probeer eens een knipperlicht met een led te maken?
3. probeer de andere kleuren leds ook eens te laten knipperen.
4. probeer eens een letter of woord op je lcd te zetten
5. als dat lukt probeer dan om de waarde van de LDR (ADC waarde)direct op je LCD te laten zien.

Dit is om al je input en output van je schakeling stap voor stap te testen. zodra 1 ding niet goed contact maakt hoeft je programma al niet meer te werken.
een voorbeeld: stap 1 en 2 zijn er om je pic te testen. voedingen, oscilator en led. als dit al niet werkt heb je een hardware probleem.
zo ga je stap voor stap verder.

Falcon

bedankt falcon 97

lijkt mij een goed plan
ik ga het eens proberen
laat nog iets van mij horen

groeten

beste falcon

ik heb wat geprobeerd
namelijk een oude hex file een tijd terug gemaakt komt aan in de pic
een hex file die ik nu maak gaat fout
als ik de led met kleuren laat knipperen lukt dit
maar als ik iets maak waarbij het lcd scherm een funktie heeft gaat het fout
maar voorheen niet zie voorbeeld in dit topic

ik heb echt hulp nodig want ik kom er niet aan uit

bij voorbaat hartelijk dank
olan

Olan,

Wat weten we nu? alleen LCD werkt niet maar de rest wel zoals het moet.

Waarschijnlijk overbodig, maar werkt je contrast regeling goed van het display? voeding en massa goed(nameten)?

Heb je nu toevallig een ander display er op aangesloten?

heel belangrijk: Als je hem in 4-bits mode aanstuurt, hoe heb je de overige 4 datalijnen aangesloten? (het beste is om elke pin apart met een 10K weerstand of naar +5V of naar massa te verbinden)

Gebruik je dezelfde grote van display als waar de procedure voor geschreven is? (Sorry, weet even niet hoe groot het display moet zijn, maar kan problemen geven als dit niet overeen komt door een ander adres gebruik in het display)

probeer eens 1 letter weg te schrijven op de eerste rij en eerste positie en verder niets en test dan je contrast eens? (heb je nl zeker weten geen probleem met adressen in het display en zou de letter gewoon moeten verschijnen)

toevallig de mogelijkheid om een ander display te proberen?

zomaar wat zaken om uit te testen..

Falcon

heel belangrijk: Als je hem in 4-bits mode aanstuurt, hoe heb je de overige 4 datalijnen aangesloten? (het beste is om elke pin apart met een 10K weerstand of naar +5V of naar massa te verbinden)

Op picbasic.nl laten ze die gewoon los hangen hoor, en dan werkt het ook gewoon.

Als deze intern als ingangen gesschakeld zijn hebben ze een hooge weerstand en kunnen ze heel makkelijk stoorsignalen oppikken en valse inputs geven..
de meeste stoorvrije verbinding is om te doen zoals ik beschreven heb.

Falcon

[Bericht gewijzigd door Henry S. op (29%)]

Nee hoor, meestal niks aan het handje, pull-ups.

okay dat is het dus niet

nu had ik op het forum een soort gelijk probleem gelezen
die had de snelheid van de serieele poort verlaagd.
heb dit ook gedaan.
maar heb een hex file ingelezen met picprog 2009
en hetzelfde hex file met winpic wat hetzelfde resultaat geeft

lcd scherm werkt niet en rgb led geeft kleur wit

ik ga nog een ander pic proberen

maar heb echt een goede tip nodig

groeten

Weet je zeker dat het LCD scherm goed wordt geinitialiseerd vanuit de library?

De lcd_44780 include ken ik niet en zie ik ook niet terug op google.
Van de (oude?) hd44780 library meen ik me te herinneren dat het altijd verstandig cq nodig was om de controller aan het begin van je prorgramma expliciet te resetten middels het commando hd44780_clear. Zit er in jouw library geen soortgelijke functie?

nee daar ben ik niet zo zeker van

ik ben eens simpel begonnen om een led te laten knipperen verder niks dit lukte
toen heb ik een tweede led er bij gezet ook weer prima
in de derde proef schrijf ik het word test naar het lcd en hier gaat het fout

de leds knipperen nog maar er word niks op het scherm gezet.
dus daar moet de fout zitten

ik ga eens een ander display proberen.