hallo

ik programeer mijn pic's met een wisp628 met de laatste firmware. ik schrijf de programma's met picbasic en laad ze in de pic met de laatste verzie van BumbleBee. de Pic die ik momenteel gebruik is de 16F877A.

ik kan het programma in de pic laden en als ik hem dan verify krijg ik geen fouten. maar als ik de pic in run mode zet krijg ik totaal onlogische waarde op de uitgangen. het lijkt zelfs of hij ledjes dimt.

als ik dan opnieuw de data verefy krijg ik meteen bij het eerste uit gelezen adress een fout.

ik heb al verschilldende dingen geprobeerd. ik heb voldoende cap's in mijn schakeling. ik heb de MCLR aan de plus gehangen met een weerstand van 33K.

Robbert

En wat als je xwisp gebruikt? Die is wat stabieler dan bumblebee.

nee met Xwisp het zelfde probleem. en met Xwisp2 ook. het lijkt wel of hij zijn eigen programma wist.

ik zal het programma eens posten:


DEVICE = 16F877A              ; de pic
XTAL 20                       ; de klok snelheid
ALL_DIGITAL ON                ; alle siganle zijn digitaal
PORTB_PULLUPS ON              ; alle port b pull up weerstanden aan.

CLEAR

DELAYMS 10.00

;        76543210
PORTA = %00000000             ; zet poort a waarden
TRISA = %11111111             ; zet poort a in en uitgangen

;        76543210
PORTB = %00000000             ; zet poort b waarden
TRISB = %00000000             ; zet poort b in en uitgangen

;        76543210
PORTC = %00000000             ; zet poort c waarden
TRISC = %00001111             ; zet poort c in en uitgangen

;        76543210
PORTD = %00000000             ; zet poort d waarden
TRISD = %00000011             ; zet poort d in en uitgangen

;        76543210
PORTE = %00000000             ; zet poort e waarden
TRISE = %11111111             ; zet poort e in en uitgangen

; symbol's
SYMBOL IngangPuls1 = PORTC.0
SYMBOL IngangPuls2 = PORTC.1
SYMBOL IngangPuls3 = PORTC.2

SYMBOL Richting1 = PORTC.3
SYMBOL Richting2 = PORTD.0
SYMBOL Richting3 = PORTD.1

SYMBOL Uitgang1A = PORTD.6
SYMBOL Uitgang1B = PORTD.7
SYMBOL Uitgang1C = PORTB.0
SYMBOL Uitgang1D = PORTB.1

SYMBOL Uitgang2A = PORTC.6
SYMBOL Uitgang2B = PORTC.7
SYMBOL Uitgang2C = PORTD.4
SYMBOL Uitgang2D = PORTD.5

SYMBOL Uitgang3A = PORTD.2
SYMBOL Uitgang3B = PORTD.3
SYMBOL Uitgang3C = PORTC.4 
SYMBOL Uitgang3D = PORTC.5

; dim's
DIM IngangMEM1 AS BIT
DIM IngangMEM2 AS BIT
DIM IngangMEM3 AS BIT
DIM IngangTEMP1 AS BIT
DIM IngangTEMP2 AS BIT
DIM IngangTEMP3 AS BIT
DIM InCount1 AS BYTE
DIM InCount2 AS BYTE
DIM InCount3 AS BYTE

InCount1 = 0
InCount2 = 0
InCount3 = 0

IngangTEMP1 = 0
IngangTEMP2 = 0
IngangTEMP3 = 0

; het programma
WHILE 1 = 1
    IngangMEM1 = IngangPuls1
    IngangMEM2 = IngangPuls2
    IngangMEM3 = IngangPuls3
        
    ; Signaal afhandeling Ingang1
    IF IngangMEM1 != IngangTEMP1 THEN
      IF Richting1 = 1 THEN  
        IF InCount1 >= 3 THEN
          InCount1 = 0
        ELSE
          InCount1 = InCount1 + 1
        ENDIF
      ELSE
        IF InCount1 = 0 THEN
          InCount1 = 3
        ELSE
          InCount1 = InCount1 - 1
        ENDIF
      ENDIF
    ENDIF
    
    ; Signaal afhandeling Ingang2
    IF IngangMEM2 != IngangTEMP2 THEN
      IF Richting2 = 1 THEN  
        IF InCount2 >= 3 THEN
          InCount2 = 0
        ELSE
          InCount2 = InCount2 + 1
        ENDIF
      ELSE
        IF InCount2 = 0 THEN
          InCount2 = 3
        ELSE
          InCount2 = InCount2 - 1
        ENDIF
      ENDIF
    ENDIF
    
    ; Signaal afhandeling Ingang3
    IF IngangMEM3 != IngangTEMP3 THEN
      IF Richting3 = 1 THEN  
        IF InCount3 >= 3 THEN
          InCount3 = 0
        ELSE
          InCount3 = InCount3 + 1
        ENDIF
      ELSE
        IF InCount3 = 0 THEN
          InCount3 = 3
        ELSE
          InCount3 = InCount3 - 1
        ENDIF
      ENDIF
    ENDIF
    
    ; Temp geheugen word gelijk gesteld aan ingangsignalen
    IngangTEMP1 = IngangMEM1
    IngangTEMP2 = IngangMEM2
    IngangTEMP3 = IngangMEM3
    
    ; Uitgangen 1 worden geset aan de hand van de Signaal afhandeling
    SELECT InCount1
      CASE 0
        Uitgang1A = 0
        Uitgang1B = 1
        Uitgang1C = 0
        Uitgang1D = 1
      CASE 1
        Uitgang1A = 0
        Uitgang1B = 1
        Uitgang1C = 1
        Uitgang1D = 0
      CASE 2
        Uitgang1A = 1
        Uitgang1B = 0
        Uitgang1C = 1
        Uitgang1D = 0
      CASE 3
        Uitgang1A = 1
        Uitgang1B = 0
        Uitgang1C = 0
        Uitgang1D = 1
    ENDSELECT
      
      ; Uitgangen 2 worden geset aan de hand van de Signaal afhandeling
    SELECT InCount2
      CASE 0
        Uitgang2A = 0
        Uitgang2B = 1
        Uitgang2C = 0
        Uitgang2D = 1
      CASE 1
        Uitgang2A = 0
        Uitgang2B = 1
        Uitgang2C = 1
        Uitgang2D = 0
      CASE 2
        Uitgang2A = 1
        Uitgang2B = 0
        Uitgang2C = 1
        Uitgang2D = 0
      CASE 3
        Uitgang2A = 1
        Uitgang2B = 0
        Uitgang2C = 0
        Uitgang2D = 1
    ENDSELECT
      
      ; Uitgangen 3 worden geset aan de hand van de Signaal afhandeling
    SELECT InCount3
      CASE 0
        Uitgang3A = 0
        Uitgang3B = 1
        Uitgang3C = 0
        Uitgang3D = 1
      CASE 1
        Uitgang3A = 0
        Uitgang3B = 1
        Uitgang3C = 1
        Uitgang3D = 0
      CASE 2
        Uitgang3A = 1
        Uitgang3B = 0
        Uitgang3C = 1
        Uitgang3D = 0
      CASE 3
        Uitgang3A = 1
        Uitgang3B = 0
        Uitgang3C = 0
        Uitgang3D = 1
    ENDSELECT
    DELAYMS 100
WEND
; einde porgramma

END

Robbert

[Bericht gewijzigd door Robbertbd op (94%)]

Ehh

Andere pic gepakt?
Voeding van de wisp gecontrolleerd (mooi 5V?).
Hoe lang zijn je prog kabels?(probeer ze zo kort mogelijk te houden, iig niet meer dan 30cm lijkt mij).
Kabels van de wisp na gekeken? Even door meten voor draadbreuken.
Geen belastingen aan de kabels oid. Dus dat de wisp niet een led keten moet voeden uit zijn programmeer lijnen.
Ontkoppeling, 100nF en 47uF. En natuurlijk zo dicht mogelijk bij de pic!. Het liefst de poten van een C verlengen en tussen de 2 voedingspinnen.
Is je voedingsspanning goed stabiel.

Als dat allemaal niet werkt zou je eens naar het onderstaande kunnen kijken.

Je zou even wat spanningen kunnen bekijken. Maar dan moet je wel weten hoe het programmer protocol ongeveer in elkaar zit. En een LA erbij kan dan ook geen kwaad.

Edit

Net hele waslijst neer gezet, staat je code er opeens. Het probleem is nu wel duidelijk. Je mist de configuratie instellingen in de pic.

CONFIG CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_ON, PWRTE_OFF, WDT_OFF, HS_OSC

[Bericht gewijzigd door Bas Smit op (13%)]

o, zou dat het zijn? ik ga de config even in de code plakken kijken wat dat doet.

Robbert

helaas, ik heb de config lijst toe gevoegt maar het maakt geen verschil. ik heb overigens bij de 16F877A nooit een aangepaste config gebruikt.

ik heb de waslijst ook af gewerkt en dat klopt ook allemaal.

Robbert

Kun je een triviaal simpel programmaatje ( ledjes doen knipperen of zo) op de pic plaatsen???
jan

jha dat heb ik ook geprobeerd. dat werkt wel.

met dit progje wil ik 3 stappen motoren aan sturen. stappen motor 1 werkt afentoe. stappen motor2 werktredelijk maar soms gaat ie weer raar doen en een paar sec later werkt motor 2 weer goed.

het lijkt naar mijn idee op slechte connecties maar zou niet weten welke.

Robbert

Kort je programma eens in tot bijv 1 PORT.

Lijkt me iig geen programmerprobleem.

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

Hallo.

Denk dat je programma te snel loopt, en dat je motoren het niet bijsloffen, delay's toevoegen.

Gr Lambiek.

ik heb het programma al een paar keer terug gebracht naar 1 poort. er zitten nu nog geen motor's aan maar ledjes.

als ik 4 leds op de 2de motor uitgang aan sluit dan loopt ie na de eerste stap goed zoals het hoort. en dan na een aantal stappen stoppen 2 van de 4 led's er mee. en als ik dan weer wat stappen doe komen ze weer terug.

het lijkt of de spanning over twee led's weg valt. ik denk dat ik mijn programma morgen ga herschrijven zonder de case functie er in.

das de enige oplossing die ik zelf nog kan bedenken. volgens mij zou het probleem niet in de hardware moeten zitten.

Robbert

Toch niet weer R-M-W?... Ledjes met voldoende serieweerstand? (> 220Ω )

R-M-W? ik heb 1K weerstanden aan de led's zitten.

ik heb 1K weerstanden aan de led's zitten.

Da's dan prima... ;) (RMW krijg je bij te zware cq capacitieve belasting)

Kun je het programma extreem traag doen lopen, bvb een stapje per seconde?? Lukt dat??
jan

edit
ps doe eens een ledje om de 10 seconden knipperen en meet dan eens of het effectief wel 10 seconden is (=> om de clock te controleren)

nog eens edit
moet de volgorde van de 2 onderstaande lijnen niet omgekeerd worden???

PORTE = %00000000
TRISE = %11111111

[Bericht gewijzigd door jan lietaer op (23%)]

ik heb er weer een programmatje in geladen die de lampjes om de 10 seconden aan of uit laat gaan. ik heb de tijd na gemeten en die klopt.

echter na dat ik hem een tijdje heb laten kniperen stopte er 1 ledje mee. en toen ben ik de uitgangs pinnen gaan na meten en toen kwam ik er achter dat op 1 pin bij high 2,5 volt staat en bij de andere 5V.

ik heb nu de leds gevoed van uit de uC wat ik al heel lang doe. maar nu zei iemand dat ik dat niet moet doen?

deze:
PORTE = %00000000
TRISE = %11111111
staan zoals het hoort.
TRISE = %11111111 betekend dat de poorten als ingang staan.
en PORTE = %00000000 betekend dat de pinnen laag zijn bij het activeren van de pic.

Robbert

Leds NOOIT direct aan een poort hangen, altijd een weerstand ertussen.

Een led is gewoon een diode, dus als de spanning hoog genoeg is gaat hij gewoon geleiden = kortsluiting.

De pic heeft wel een soort van begrenzing op 25mA, maar die is zeker niet bedoelt om een weerstandje uit te sparen, meer als laatste redmiddel.

Dus als je weer wat onderdelen gaat bestellen, een flinke zooi 1K weerstanden erbij bestellen.

het maakt niet uit waar de weerstand staat. want het staat in serie. zolang er maar ergens een weerstand tussen de pin en de voeding staat. en dan nog is het om de led te beveiligen en niet om de pic te beveiligen want die is ttl en die kan 5 volt zoizo hebben.

ik heb nu de leds aan de plus gehangen. maar ik heb nogsteeds het zelfde probleem. hij lijkt zijn eigen programma weg te eten.

Op 24 december 2008 13:32:54 schreef Robbertbd:

deze:
PORTE = %00000000
TRISE = %11111111
staan zoals het hoort.
TRISE = %11111111 betekend dat de poorten als ingang staan.
en PORTE = %00000000 betekend dat de pinnen laag zijn bij het activeren van de pic.

Robbert

Moet je niet eerst zeggen dat de poort een uitgang is (tris....) en nadien zeggen dat de poort laag moet zijn (porte =....)??

jan
ps Ooit heb ik iets gelezen over het verschil in dure Pic programmers tov gewone programmers. Het kwam erop neer dat goedkope toestellen steeds op 5 volt programmeerden en dat dure toestellen op die spanning programmeerden die ook in de praktijk wordt gebruikt ( kan bvb 3.3 volt zijn). Daar beweerde men dat men enkel met een dure programmer kon garanderen dat de pic 40 jaar geprogrammeerd zou blijven. Werkt jou schakeling op 5 volt????

Op 23 december 2008 12:49:16 schreef Robbertbd:
ik heb voldoende cap's in mijn schakeling.

Mogen we die schakeling toch eens zien?

Op 24 december 2008 16:11:30 schreef jan lietaer:
ps Ooit heb ik iets gelezen over het verschil in dure Pic programmers tov gewone programmers. Het kwam erop neer dat goedkope toestellen steeds op 5 volt programmeerden en dat dure toestellen op die spanning programmeerden die ook in de praktijk wordt gebruikt ( kan bvb 3.3 volt zijn). Daar beweerde men dat men enkel met een dure programmer kon garanderen dat de pic 40 jaar geprogrammeerd zou blijven. Werkt jou schakeling op 5 volt????

Bron? Dit verhaal lijkt mij onzin, en er is ook nog zoiets als HVP.

Op 24 december 2008 16:11:30 schreef jan lietaer:
Moet je niet eerst zeggen dat de poort een uitgang is (tris....) en nadien zeggen dat de poort laag moet zijn (porte =....)??

Nee, liever niet.
Voordat je met TRIS een poort omschakelt als uitgang, moet je eerst instellen of deze dan een hoog (+5V) of een laag (0V) niveau heeft.
Als je dat niet doet dan start de PIC met een onbekend niveau als uitgang.
En ook al schakel je meteen daarna de poort naar een HOOG of LAAG niveau, bij grote stromen kan de superkorte tijd tussen de TRIS en de PORT instelling al tot grote problemen leiden.

Zie ook www.picbasic.nl/beginners3.htm

ik zal het schema vandaag uit tekenen en posten, tussen mijn kerst verplichtingen door :p

Robbert

Op 24 december 2008 21:29:38 schreef Henry S.:
[...]
Bron? Dit verhaal lijkt mij onzin, en er is ook nog zoiets als HVP.

http://www.voti.nl/pickit2faq/n_index.html
meer bepaald in puntje "3 what is a prototype"

jan

Op 24 december 2008 23:35:45 schreef Frits Kieftenbelt:
[...]

Nee, liever niet.
Voordat je met TRIS een poort omschakelt als uitgang, moet je eerst instellen of deze dan een hoog (+5V) of een laag (0V) niveau heeft.
Als je dat niet doet dan start de PIC met een onbekend niveau als uitgang.
En ook al schakel je meteen daarna de poort naar een HOOG of LAAG niveau, bij grote stromen kan de superkorte tijd tussen de TRIS en de PORT instelling al tot grote problemen leiden.

Zie ook www.picbasic.nl/beginners3.htm

Idd, dit wist ik niet, hoog tijd dat ik een paar van mijn eigen programmas aanpas.

jan