Assembly hartmonitor

Beste mensen ,

Met mijn projectgroep kunnen we eruit niet komen. We moeten een hartslag monitor bouwen die op LCD-scherm het hartslag weergeeft.

IN de bijlage is hex document.

We kunnen niet verder komen... hoe zorgt je ervoor dat de timer die 5 seconden bijhoudt en tegelijkertijd de pulsen telt en vervolgens weergeeft op lcd scherm.

bij voorbaat bedankt

Arco

Special Member

Wat moeten wij met een (zinloze) hexfile?
Afgezien van het feit dat we niet eens weten voor welke controller het is, zouden we dan eerst een dissasembly moeten maken...

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

het gaat om 16f870 , ik zet het in een word bestand , sorry

Misschien een of meer interrupts gebruiken?

Externe gebeurtenissen kunnen een external interrupt geven en intern kun je op overflow van timers een interruptafhandeling starten.

Een PIK doet maar een taak gelijktijdig, maar een interruptaanvraag zoals jouw bericht op CO, kan hem die even laten onderbreken en een afhandelingsroutine starten in de vorm van dit bericht.

en hoe zou je dan de code ervoor kunnen schrijven ... we hadden zo weinig uitleg over assembly ...

Arco

Special Member

...Een PIK doet maar een taak gelijktijdig

Alhoewel juist, mis ik de link met electronica... :)

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

IN dit bestand staat de hardware , hopelijk kunnen jullie ons beetje helpen.

Het staat in de hoofdstuk project

niemand die zo aardig wil zijn ? :P

[Bericht gewijzigd door Henry S. op dinsdag 7 april 2015 20:11:16 (15%)

...Een PIK doet maar een taak gelijktijdig

dan moet ik toch denken aan voortplantingssnelheid, ook zo'n biologisch begrip.

niemand die zo aardig wil zijn ? :P

Misschien eens nadenken met je heel projectgroep ?
Het is hier toch geen antwoordenfabriek, je gooit er het hexfile in (wat denk je zelf dat we daarmee kunnen aanvangen..) en het antwoorden rollen er vanzelf uit ?

en hoe zou je dan de code ervoor kunnen schrijven ... we hadden zo weinig uitleg over assembly ...

al in het datasheet gekeken ? Staat maar de bladzijde of vijf in over de ontwikkelen.

[Bericht gewijzigd door Henry S. op dinsdag 7 april 2015 20:11:47 (63%)

stop het overmatig spatiegebruik !

ik heb hierbij text file geupload ... en we hebben al flink tijd eraan gedacht en komen we er niet uit ...

En u gaat nu blijven wachten totdat u een diploma krijgt? Of gaat u toch maar zelf iets verzinnen om uit deze impasse te komen?

[EDIT]
En als deze practicumopdracht niet aansluit bij de behandelde lesstof, heeft u drie opties:

-> zelf de benodigde kennis verzamelen en bestuderen.
-> de docent vragen om meer theoretische uitleg.
-> een andere studierichting kiezen die meer bij uw mogelijkheden en ambities aansluit.

[Bericht gewijzigd door Franzki op dinsdag 7 april 2015 18:36:21 (30%)

OK, ik doe een poging.

Je hebt een processor die heeft zijn restart adres op 0 en zijn interruptadres op 3

Op 0 staat dan

jmp main ; dus spring naar eerste instr hoofdpgm

op adres 3 staat dan jmp int0

Dan denk je misschien waarom gebruik je adres 2 en 1 niet. Wel dat is omdat jmp main al drie posities vergt in de knullige processor die ik hier als voorbeeld concipieer.

Is er een interrupt, zoiets als dat je staat te koken en Eneco belt om je te verleiden hun energie af te nemen in plaats van die van Nuon, dan staat daar speciaal een routine voor klaar.

In het voorbeeld zou die naar analogie luiden:
Val dood, ga wat nuttigs doen, mijn ei staat te verbranden, doei.

In het assembler geval heet die

code:


int0 push PSW
     pust ACC
     push wat er verder niet beschadigd mag worden zoals je ei
     scheld die knakker verrot
     pop je ei 
     pop ACC
     pop PSW
     reti

Je hoofdprogramma, wat je al schreef en in hex goed, kort en krachtig, leesbaar was voor iedereen wiens moeder een heks is/was, wordt dan bij een interrupt van een hartpuls of een secondepuls onderbroken om even wat anders te doen dat directe aandacht vraagt.

Komt er een interrupt (telefoonbel van Essent) dan springt je programmaexecutie altijd naar adres 3, dat doorverwijst naar bovenbeschreven int0 en reti laat hem weer teruggaan naar waar hij gebleven was.

Zoek even in je processor specs hoe dat gaat.

Doei

Ik vraag me af hoe je aan die code van die BPM meter komt...
Als die wordt aangeleverd door de school en je mag/moet 'm gebruiken(en dus geen plagiaat pleegt)zal een van de projectgroep-deelnemers zich moeten ontfermen over de assembly code..(ah, kost je een weekje..)
Met woorden als "we komen er niet uit" , daar kunnen wij ook niks mee..
Het is juist de bedoeling dat je dit pragmatisch gaat aanpakken,en de problemen desnoods gaat opdelen zodat je ze wel begrijpt.

Re-integratiecoach uitgerangeerde en degoutante electronen

Ja leuk, maar zo werkt het dus niet bij een Pic uC.
Je hoeft niet te pushen en poppen, dat doet de processor zelf. En de Reti aan het eind heet bij een Pic RetFie.

Hoe kom je uberhaupt aan de assembly code als je niets van assembly weet?

Even een correctie: je mag natuurlijk altijd pushen en poppen als je waarden niet via globale variabelen wilt doorgeven, maar de stack van een 16F is dermate klein dat ik dat niet kan aanraden.

Een variabele pushen vervolgens weer poppen heeft in ieder geval totaal geen zin.

Just find out what you like and let it kill you

"Vroeger" in mijn tijd mocht je pas practicum doen in interfacetechniek en embedded software ontwikkelen als je het theorievak MC68000 assembler met een voldoende had afgerond in het voorgaande semester.

En verder... zoveel instructies heeft een Pic niet...

guidob

Overleden

Op 7 april 2015 19:02:54 schreef hadv:
Ja leuk, maar zo werkt het dus niet bij een Pic uC.
Je hoeft niet te pushen en poppen, dat doet de processor zelf.

Uhm, zo'n 16F doet dat niet zelf (zie datasheet 11.11). Staat ook in de code:

pic asm code:


    MOVWF backup_W	; sla inhoud W-register op
    SWAPF STATUS, 0	; een ingewikkelde manier om ...
    MOVWF backup_S	; (zie ook blz. 100 uit de data-sheets).
...
    SWAPF backup_S, 0
    MOVWF STATUS        ; herstel inhoud status-register
    MOVF backup_W, 0    ; herstel inhoud W-register

"Vroeger" was bij mij een 6809 :)

niemand die zo aardig wil zijn ?

Antwoord is al gegeven door dr Blan.

Misschien een of meer interrupts gebruiken?

Je zit op een hogeschool? Wat is het probleem om ergens een boek uit de kast te trekken en je in te lezen over interrupts? Het is echt een van de simpele basisdingen die je gewoon moet weten als je met embedded cpu's gaat werken.

Vrag me ook af waar dat stuk code vandaan komt, te zien aan het taalgebruik in het commentaar in elk geval niet van de TS zelf.

stop het overmatig spatiegebruik !

ik ben er bijna uitgekomen . Alleen wat we nog moeten doen is op een of andere manier het optellen van puls zodanig doen dat we het op LCD-scherm krijgen , iemand tips ?

verder heb ik het stuk waar programma kijkt of er 5 seconden voorbij zijn in interrupt functie gezet. is het misschien beter om het in hoofdprogramma-gedeelte te doen ?