Icecap skrev:Det står fortfarande i databladet. Det är ganska säkert angivit minimum och maximum tid/frekvens.
Fast nu sitter jag på en Codesys PLC jag jag tror inte manskap ange någon sådan frekvens i programmet. Man får helt enkelt köra med klassisk algoritm.
Jag startade programmet nu och jag märkte att det fungerade inte. Det mest konstiga var att CLK är konstant TRUE hela tiden. Jag testade sätta en delay på 5 sekunder för att kolla om lampan blinkar. Nej. Den lyser med fast sken.
CS och CLK är TRUE hela tiden, vilket är märkligt. Oavsett om jag sätter T#100MS till T#5S så är det samma sak hela tiden. Jag får inga errors eller liknande. COUNT är fortfarande 0.
Men dessvärre så svarar inte min ADC något. Jag tror med att jag har antagit att en digital GPIO kan spotta ut 3.3 volt. Det kunde den tydligen inte.
När jag brukar tända lysdioder så brukar jag sätta en GPIO som input. Sedan en LED mellan en GIPO och VCC.
Men jag kanske har fel?
Just nu så är CS en output. Jag har testat satt en LED mellan CS och GND och det händer inget. Men jag ser på min datorskärm att CS blir sant och falsk.
Nej, du ser inte att CS växlar läge, du ser att den registerbit som ska vara CS växlas.
Jag är ganska säker på att du helt enkelt inte gör det som ska göras för att kretsen ska svara.
När jag är i det läge verifierar jag att pinnarna gör exakt som jag har tänkt, detta sker med oscilloskop eller LED.
Därefter testar jag input för att se om de ändrar läge i avläsningen.
När dessa saker är verifierat - och det fortfarande inte fungerar - kan jag skylla resten på att jag har gjort fel i programmeringen varför jag tar tag i datablad och går igenom steg för steg.
Din kod framstår för mig som djupt olämplig och något som kan minskas ner till fattbara funktioner - men det är ditt val, jag har försökt att ge tips tidigare och för att ta ett dansk uttryck: "Det er spildte Guds ord på Balle-Lars".
Icecap skrev:Nej, du ser inte att CS växlar läge, du ser att den registerbit som ska vara CS växlas.
Jag är ganska säker på att du helt enkelt inte gör det som ska göras för att kretsen ska svara.
När jag är i det läge verifierar jag att pinnarna gör exakt som jag har tänkt, detta sker med oscilloskop eller LED.
Därefter testar jag input för att se om de ändrar läge i avläsningen.
När dessa saker är verifierat - och det fortfarande inte fungerar - kan jag skylla resten på att jag har gjort fel i programmeringen varför jag tar tag i datablad och går igenom steg för steg.
Din kod framstår för mig som djupt olämplig och något som kan minskas ner till fattbara funktioner - men det är ditt val, jag har försökt att ge tips tidigare och för att ta ett dansk uttryck: "Det er spildte Guds ord på Balle-Lars".
Jaha. Så det jag ser på skärmen behöver inte nödvändigtvis hända i verkligheten?
Jag är mycket säker på att jag inte har rätt kommunikation.
Okej. Steg 1 för mig är att verifiera om signalerna ändras med tiden, precis som på skärmen.
Jag tror jag har hittat problemet varför det inte fungerar för mig.
Om jag hör en enkel while loop.
While True DO
Lampa hög.
Vänta 5 sekunder
Lampa låg
Vänta 5 sekunder
End while
Då tänds lampan konstant eller släks konstant.
Men skulle jag bara säga lampa hög , utan while loopen, så tänds lampan och jag kan enkelt ändra värdet på lampan från hög till låg.
Jag misstänker att programmet fungerar så att det måste köras klart först innan den kan säga åt till PLC "okej. Jag har gått igenom programmet och så här lyder det. Åh 1 och 2 Hej och hå *militärparadmusik*"
Eller vad tror ni? Jag kan manuellt redigera variablernas värden. Det känns ju inte som det skulle vara något för mig. Jag vill ju bränna in koden i min PLC och sedan se på skärmen om vad dom händer.
Om jag tar ett exempel. PLC programmering fungerar lite annorlunda. Hos min PLC så finns det ett program som heter Task. Det programmet anropar andra typer av program i följdordning och dessa program anropas vid vissa intervaller.
Det fungerar inte att sätta en while loop mitt i programmet och sedan vidareutvecklar man kod i den loopen, precis som man gör i Arduino/AVR.
Det fungerar inte heller att jag har ett program som loopar 1 gång per sekund. Programmet säger lampa PÅ. Samtidigt som jag har ett annat program som också loopar 1 gång per 5te sekund, fast i prioritet 2, som säger lampa AV.
Då blir det "Chanel Application.GPIO17 is already used in another task. Signal May be overwritten".
Alltså måste jag tänka lite annorlunda här än klassisk C programmering.
Orsak är nog okunnighet, om det mesta.
Nej man behöver inte tänka annorlunda, eftersom det är logiken som skapar programmet, oavsett vilket språk man skriver i.