tutorial van internet

hallo,

op het internet kwam ik deze tutorial tegen:
http://www.pyroelectro.com/tutorials/digital_tachometer_rpm/...tware.html

deze probeer ik na te maken door de main C file te open en te plakken in mijn IDE en te compilen maar op een of andere manier zit de compiler te klagen over de interrupt control, daar gaat iets fout. zie bijlage

kan iemand anders eens kijken of die de main.c file uit de link wel gecompiled krijgt. en tips geven wat er fout gaat

gr

pragma's zijn die gestandaardiseerd, die zijn per compiler anders, en daarmee ook de manier waarop je aangeeft dat een functie een ISR is (daarvoor moet een ander call framework gebruikt worden), en hoe je ervoor zorgt dat de pointer naar die functie op de juiste plaats in de vector tabel komt.

Kortom: deze code is waarschijnlijk geschreven voor een andere compiler, en je zou dus kunnen uitzoeken welke en die installeren, of leren hoe jouw compiler werkt en de code aanpassen.

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

Succes!

Vertel eerst eens wat voor compiler je gebruikt, en waarom. Kijk dan waarmee het ooit geschreven is. Kortom iets meer info kan helpen.

De zinloosheid des levens is nog geen rechtvaardiging voor sisyphusarbeid.

hey hunter,

ik zou niet weten waar het ooit in geschreven is, ik kom gewoon een tutorial tegen en probeer het na te maken. wel heb ik met hulp van internet een soort van "interrupt header file" gemaakt. dan zegt de compiler dat de interrupt goed is maar krijg ik de foutmelding;

nbproject/Makefile-default.mk:90: recipe for target '.build-conf'

zegt mij ook niks.

ook heb ik de configuration bits nog niet bijgevoegd zodra ik dat doe
nog meer compiler foutmeldingen

zij bijlage voor mijn compiler info

maar als een ervaren iemand als jij die tutorial kopieert en plakt in jouw eigen project, doet hij het dan wel of moet jij ook een oorlog voeren

bedankt

Een ervaren engineer copieert niet zomaar klakkeloos iets van het internet en drukt op "compile". Die copieert, past de code aan naar z'n eigen compiler/werkomgeving en compileert dan pas.
Dus, je moet weten wat je aan het maken bent. Als je pragmas nodig bent om aan te geven dat het een interrupt routine is, moet je de pragmas van jouw compiler gebruiken, en niet die er toevallig in staan (en zeker niet als je niet weet waarvoor ze ooit bedoeld waren).
Bottom line: eerst snappen wat er staat.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
hennep

Golden Member

Het lijkt er op dat de auteur de MPLAB IDE & C18 Compiler gebruikt.

Ik heb even geprobeerd om de code te compileren met gcc.
Daarbij krijg ik de melding dat er header files ontbreken:
#include <p18f452.h>
#include <capture.h>
#include <timers.h>
#include <delays.h>

Mogelijk zijn de ontbrekende header files onderdeel van de MPLAB omgeving.

Meestal zit er bij projecten als dit een zip file met alle benodigde files. Hierbij alleen maar een c source

stuur even een bericht naar de auteur, mogelijk kan hij je de headerfiles aanleveren.
hierin staat zijn emailadres: http://www.pyroelectro.com/tutorials/digital_tachometer_rpm/...chometer.c

Op 23 juli 2017 15:44:58 schreef flipflop:
Een ervaren engineer copieert niet zomaar klakkeloos iets van het internet en drukt op "compile". Die copieert, past de code aan naar z'n eigen compiler/werkomgeving en compileert dan pas.

Ik programmeer in C sinds 1987, heb dus absoluut weinig ervaring :-)
Als ik aan een project van een ander begin dan is compileren het eerste dat ik doe!
Ik begin namelijk helemaal niet aan andermans werk als het niet compileert.

ik heb weinig ervaring met c programmeren, wel met siemens stl fbd lad maar dat is toch eenvoudiger. dat c is wel een klasse apart. maar daarom mag ik het nog wel proberen. zo heb ik thuis een siemens plc met wat kaarten en bestudeer ik software die ze op het werk toepassen. maar dat microchip vindt ik ook fascinerend, dat er zoveel techniek in een dingetje past dat kleiner is dan een euro munt. daar wil ik ook wel wat mee pielen vandaar. eerdere projecten maakte ik na van de website studentcompanion.com en bestudeerde ze
veranderde/experimenteerde er wat mee. en nu kom ik die toerenteller tegen en denk 'dat moet ook lukken' maar het valt wat tegen. maar als je tips hebt wat ik fout doe graag en zo niet jammer

hulp is welkom

Op 23 juli 2017 16:00:37 schreef hennep:
Als ik aan een project van een ander begin dan is compileren het eerste dat ik doe!

Dus jij gebruikt source code zonder dat je iets weet over de inhoud? Lijkt me niet slim.

Verder, het kan best zijn dat code helemaal niet compileert in jouw omgeving, maar toch prima code is. Kijk maar naar gevalletje TS. Jij zou het verwerpen.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Hier de hex files
Compileren ging niet van een leien dakje, deels ook mijn fout door een included objectfile ooit veranderd te hebben..

Burn versie is voor de pic itself
4simultor is versie voor een simulator waar de wachttijd is verkort.
..moest 250ms wachten en daar heb ik geen zin an...in processorcyclie is dat "ages"
enfin in de sim krijg ik RPM: 0 te zien
succes

PS Oja , de compiler die ik gebruik is MCC18
Edit: goed dat ik topics nog altijd even nalees, zo zie ik in de orginal code:
#pragma code InterruptVectorHigh = 0x000008 //interrupt pointer address (0x18 low priority)
en in jouw screenshot zie ik 0x018 maar dat is de low int

[Bericht gewijzigd door Arabel op 24 juli 2017 00:27:23 (22%)]

Re-integratiecoach uitgerangeerde en degoutante electronen

@flipflop Ik denk dat hennep wat anders bedoelt. Je zoekt software die je denkt te kunnen gebruiken, leest de "readme", als er website/github...is voor deze software, dan zoek je daar of je het ding kan gebruiken. Dan downloaden en direct compileren, "as is". Zie je direct aan de compilermeldingen wat je moet nakijken, lib's downloaden...

Zo doe ik het meestal. Goed geschreven open source compileert meestal ok. Soms wat tweaken.

Minder goed geschreven spul, zoals het mijne :-), daar is soms wat meer werk aan.

Het jammerlijkste aspect van het leven nu is dat de wetenschap sneller kennis vergaart dan de maatschappij wijsheid. Asimov, Isaac
hennep

Golden Member

Op 23 juli 2017 21:10:21 schreef flipflop:
Dus jij gebruikt source code zonder dat je iets weet over de inhoud? Lijkt me niet slim.

Gebruiken en compileren zijn toch twee heel verschillende dingen.

Verder, het kan best zijn dat code helemaal niet compileert in jouw omgeving, maar toch prima code is. Kijk maar naar gevalletje TS. Jij zou het verwerpen.

Ja, vaak verwerp ik het al naar aanleiding van de foutmeldingen.
Goed geschreven code is namelijk ook compiler onafhankelijk.
Je zoekt vaak sneller een ander code fragment dat dat je de fouten er uit haalt. Als je niet snel iets anders vind dan kun je altijd een tweede poging doen.

Maar ik ben absoluut niet bezig om jouw manier van werken af te zeiken. Ga lekker door zoals jou het het beste uitkomt.
Ik doe het anders.

OK , even een update:

TS heeft naar aanleiding van mijn "succesvolle" compile actie contact gezocht, en we hebben e.e.a. besproken over de compiler settings etc . In het kort heeft TS de boel ingericht zoals het zou moeten en whallaa het werkt..
Misschien kan TS in het kort uitleggen wat er precies fout is gegaan
voor de problemsolving/zoekfunctie CO.

TS zal nu de code bestuderen wat wel weer vragen zal oproepen.

Re-integratiecoach uitgerangeerde en degoutante electronen

ja mensen,

het is zo dat ik de xc8 compiler nog geselecteerd had (onbewust) maar voor dit project had dat de c18 compiler moeten zijn. lekker handig want voordat arabel mij hierop attendeerde ben ik het wel tegengekomen ergens op het internet en had ik het ook geinstalleerd, maar nooit erbij stil gestaan dat je het ook zelf moet aangeven dat deze compiler gebruikt moet worden.
ik weet eigenlijk haast wel zeker dat dit het moet zijn geweest

wel mooi dat hij het nu doet. ik had wel wat dingen die niet helemaal duidelijk zijn, maar ik moet het eerst nog even grondig bestuderen en dan kom ik er wel op terug

hallo

ik zit even de toerenteller door te nemen
op de ventilator as zitten 7 bladen in de som wordt er gedeeld door 7. maar als ik die 7 verander in 1 en in de proteus deel ik de simulatie input ook door 7 dan begint de toerenteller toch rare waarden aan te geven. heeft iemand hier een verklaring voor

ik zat vorige projecten van mij te bekijken en daarin werd de OSCCON gedefineerd. hierzo is dat niet, waarom hoeft dat niet

in de tutorial gebruiken ze: "array_2[8] = {'\0','\0','\0','\0','\0','\0','\0','\0'};" verderop in de tutorial gebruiken ze ook array. van siemens programmeren ken ik het wel, maar in deze tutorial kan ik het niet plaatsen. heeft iemand hier informatie over of links naar wat ik moet zoeken om hier meer over te weten

bedankt

Hallo ,

Een Array is een aaneengesloten stukje geheugen(gegevensstructuur) wat elementen(int,char,bytes,words,doublewords etc) kan bevatten en komt als woord in veel programmeertalen voor zoals C en Pascal en andere talen.
De array wordt gedefineerd als : type array_naam[lengte]=(val,val,val,etc); Waarin <type> char,int,byte, etc kan zijn.
Het type verteld de compiler hoeveel geheugenruimte van ieder element te reserveren.( Definitie kan per prog.Taal verschillen)

Een array kan ook meerdere dimensies hebben.
vb char my_array[0..2,0..1]=(('a','b','c'),('d','e','f'));
Het label <my_array> kun je zien als een pointer naar het begin van zo'n blok elementen.

uit code:
char array_2[8] = {'\0','\0','\0','\0','\0','\0','\0','\0'};
Hier zie je een array van het type <char>, genaamd "array_2" en is 8 chars lang.
'\0' is een vooraf definitie om de geheugen plaats te vullen met het charakter 0 = leeg charakter.

Het veranderen van delen door 7 naar delen door 1 is hetzelfde als wanneer ik de divide gewoon weghaal.. iets(4) delen door 1 is altijd iets(=4) De compiler ziet echter een div(/) instructie en zal die ook als zodanig vertalen.
Maar er wordt in een soort window het aantal pulsen gemeten en door te delen door 1 wordt die pulswaarde 7 x zo hoog!!!
daarna wordt gekeken of die pulswaarde als waarde binnen een venster valt : "if( cur_cap_val > 4000 || cur_cap_val < 1000){"
if pulswaarde groter dan 4000 OF pulswaarde is kleiner dan 1000 laat dan een '0' zien.
En dat kan rare waarden opleveren ,ook door het overflowen van counters(hoofdoorzaak)..

Re-integratiecoach uitgerangeerde en degoutante electronen

ja bedankt,

ik zit even the kijken voor wat er in overflow moet gaan. als ik het moet zeggen dan is het "cur_cap_val" van het type "unsigned long int" volgens mij is dat al 32 bit. hoe moet ik dat dan oplossen