SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 20
20 gasten
0 leden:
Forum > Diversen > 2 knoppen werken wel en 2 niet?
[1] 2 »
pascalbianca
Lid
Berichten: 1394
Gepost op dinsdag 8 December 2009 18:54:52 QuoteWijzig

Ik heb een printje met 4 knopjes erop.
2 zitten op de port b en nu heb ik 2 op port a , aangezien alle port b's vol zijn.
Nu mijn knopje op porta.1 werkt niet , wat is het probleem hier bij mij?


Code
;Poortnamen
Symbol LED_Groen    = PORTA.2 ;LED 
Symbol LED_Rood     = PORTA.3 ;LED 
Symbol ToetsHoger   = PORTB.0 ;Deze pulstoets laat de teller omhoog lopen
Symbol ToetsLager   = PORTB.1 ;Deze pulstoets laat de teller omlaag lopen
Symbol ToetsStart   = PORTA.1 ;Deze pulstoets laat de tijd zien

PORTA = %00000000             ;Alle PORTA uitgangen uit (laag maken)
TRISA = %11110011             ;PORTA.2 en A.3 zijn uitgangen voor de LED's
TRISB = %11111111             ;Deze regel mag eventueel weggelaten worden

PORTB_PULLUPS On              ;On-chip pull-up weerstanden actief (voor de schakelaars)


http://pascalbianca.blogspot.nl/
19roland70
Lid
Berichten: 123
Gepost op dinsdag 8 December 2009 19:25:54 QuoteWijzig

externe pull - up weerstanden gebruiken op de A poorten, deze interne zitten alleen op portB
 
[Bericht gewijzigd door 19roland70 op Dinsdag 8 December 2009 19:28:38]

pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 9 December 2009 03:54:31 QuoteWijzig

En welke weerstand moet dan tussen die poort en de 5Volt?
100 ohm cq. 1k ohm?

Edit:
Aangezien ik alleen als laagste 120 ohm had liggen, heb ik die gebruikt bij porta.0 en 1 en het werkt.
 
[Bericht gewijzigd door pascalbianca op Woensdag 9 December 2009 04:27:55]


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 9 December 2009 08:07:22 QuoteWijzig

Nog een vraag.
Ik heb de volgende sub die de tijd laat lopen.

Code
LopendeTijd:
Cls                           ;Display allereerste keer wissen
Print "Huidige tijd:"         ;Zet tekst op het display
While 1 = 1                   ;Oneindige lus
 If Seconden = 60 Then         ;Als 'Seconden' waarde gelijk is aan 60, dan voeg 1 minuut toe
  Inc Minuten
  Seconden = 0                ;Reset seconde terug naar 0
 EndIf
 If Minuten = 60 Then         ;Als 'Minuten' waarde gelijk is aan 60, dan voeg 1 uur toe
  Inc Uren
  Minuten = 0 
 EndIf
 If Uren = 24 Then         ;Als 'Minuten' waarde gelijk is aan 60, dan voeg 1 uur toe
  ;Inc Uren
  Uren = 0 
 EndIf
DelayMS 1000 ;DelayMS 1000 ; 1sec. wachten
Inc Seconden
Print At 2, 2,DEC2 Uren,":",DEC2 Minuten,":", DEC2 Seconden ;De waarde in 2 cijfers op het display zetten 
Wend                          ;Terug naar WHILE



Hij begint dus te lopen vanaf de tijd die ik instel.
Maar als ik die print regel weglaat, is er dan een mogelijkheid om die op de achtergrond door te laten lopen?
Dus als ik in mijn menu , tijd tonen kies, dat hij dan laat zien wat op dat moment zijn tijd is?


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op woensdag 9 December 2009 09:50:33 QuoteWijzig

1k-10K wordt normaal gebruikt voor pull-up.

Dat op de achtergrond doorlopen kan als je het onder interrupt doet. bekijk die code van mijn bcd klok maar eens.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 9 December 2009 19:57:33 QuoteWijzig

Ik heb echt de gehele dag zitten te pluizen en uit te dokteren hoe ik dat nu aan de gang moet krijgen, maar ik kom er echt niet uit, sorry


http://pascalbianca.blogspot.nl/
Pyro-Brad
Lid
Berichten: 253
Gepost op woensdag 9 December 2009 20:48:36 QuoteWijzig

Ik heb in de wandel gangen gehoord dat er een intterupt tutoreal in het volgende magazine komt


nu nog het nubke van schematheek :p
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 10 December 2009 05:51:37 QuoteWijzig

owow dat die dan maar rap uitkomt


http://pascalbianca.blogspot.nl/
Zatar
Lid
Berichten: 263
Gepost op donderdag 10 December 2009 08:36:48 QuoteWijzig

Waarschijnlijk geen voor nieuwjaar jonges, het ware nogthans onze bedoeling!


Maffer dan hier kan je ze niet vinden ... || www.zatar.be
Stynus
Admin
Berichten: 2773
Gepost op donderdag 10 December 2009 11:00:47 QuoteWijzig

Dat kan idd nog even duren. Door de studies heb ik de laatste weken enorm weinig tijd gehad om de ontwerpen af te maken en artikels te schrijven. Onder de kerstvakantie ga ik misschien wel een deel kunnen inhalen maar moet ook veel leren want heb ik januari examens.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 10 December 2009 12:55:36 QuoteWijzig

Ik zou zeggen alvast veel sterkte met leren Stynus.
Maar zou iemand mij mischien alsnog kunnen helpen.
Dit is het enigste stukje in de software waar ik mee vasthang , als dit opgelost is draait hij voor 100%.

In onderstaande stukje code laat hij de tijd zien op de lcd, maar ik wil hem op de achtergrond alsnog hebben doorlopen, zodat als ik hem op het display wil tonen, toch gewoon heeft doorgelopen.


Code
LopendeTijdTonen:
Cls                           ;Display allereerste keer wissen
Print "Huidige tijd:"         ;Zet tekst op het display
While 1 = 1                   ;Oneindige lus
If Menuutje = AAN Then GoTo Menu 
 If Seconden = 60 Then         ;Als 'Seconden' waarde gelijk is aan 60, dan voeg 1 minuut toe
  Inc Minuten
  Seconden = 0                ;Reset seconde terug naar 0
 EndIf
 If Minuten = 60 Then         ;Als 'Minuten' waarde gelijk is aan 60, dan voeg 1 uur toe
  Inc Uren
  Minuten = 0 
 EndIf
 If Uren = 24 Then         ;Als 'Minuten' waarde gelijk is aan 60, dan voeg 1 uur toe
  ;Inc Uren
  Uren = 0 
 EndIf
DelayMS 1100 ;DelayMS 1000 ; 1sec. wachten
Inc Seconden
Print At 2, 2,DEC2 Uren,":",DEC2 Minuten,":", DEC2 Seconden ;De waarde in 2 cijfers op het display zetten 
Wend                          ;Terug naar WHILE


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op vrijdag 11 December 2009 07:33:24 QuoteWijzig

Ik heb afgelopen nacht vanaf 03.45 uur zitten te puzelen en heb nu volgens mij een kleine interrupt gemaakt.

Hij is maar simpel, maar erop verder door werken kan daarna altijd.
Is dit een juiste uitwerking of kan hij ermee door?

Code
Device 16F648A 
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF

ALL_DIGITAL TRUE 
PORTB_PULLUPS On 

led var PORTA.2

;OPTION_REG = %01111111 ' PORTB pullups aanzetten
On Interrupt GoTo myint ' 
INTCON = %10010000 ' 

Dim Seconden          As Byte   ;Deze variabele bevat de Seconden 
Dim Minuten           As Byte   ;Deze variabele heeft de Minuten
Dim Uren              As Byte   ;Deze variabele heeft de Uren
;Om tijd sneller in te stellen eventueel vastklokken vooraf
Seconden = 0
Minuten  = 40
Uren     = 7

loop: High led ' Led aan doen
Cls                           ;Display allereerste keer wissen
Print "Huidige tijd:"         ;Zet tekst op het display
While 1 = 1                   ;Oneindige lus
;If Menuutje = AAN Then GoTo Menu 
 If Seconden > 59 Then         ;Als 'Seconden' waarde gelijk is aan 60, dan voeg 1 minuut toe
  Inc Minuten
  Seconden = 0                ;Reset seconde terug naar 0
 EndIf
 If Minuten > 59 Then         ;Als 'Minuten' waarde gelijk is aan 60, dan voeg 1 uur toe
  Inc Uren
  Minuten = 0 
 EndIf
 If Uren = 24 Then         ;Als 'Minuten' waarde gelijk is aan 60, dan voeg 1 uur toe
  ;Inc Uren
  Uren = 0 
 EndIf
DelayMS 1100 ;DelayMS 1000 ; 1sec. wachten
Inc Seconden
Print At 2, 2,DEC2 Uren,":",DEC2 Minuten,":", DEC2 Seconden ;De waarde in 2 cijfers op het display zetten 
Wend                          ;Terug naar WHILE

GoTo loop ' 

' Interrupt handler
Disable ' Geen interrupts na dit punt
myint: 
;Clear : Cls ;Wis alle RAM geheugen
Print At 1,1, "U heeft een "
Print At 2,1, "toets ingedrukt!"
Low led ' If we get here, turn LED off
DelayMS 1500 ' Wait 
Cls ;Wis alle RAM geheugen
INTCON.1 = 0 ' Wis interrupt 
Resume ' Terug naar loop
Enable
End



Maar als ik dus de toets indruk , houd het toch volgens mij in dat de tijd dan in principe stopt met lopen, toch?
Dus krijg ik een tijds achterstand in mijn klokje of niet?

Die code met:
Code
Seconden = 0
Minuten = 40
Uren = 7


is om even sneller de juiste tijd in te stellen.
 
[Bericht gewijzigd door pascalbianca op Vrijdag 11 December 2009 07:45:31]


http://pascalbianca.blogspot.nl/
leip11
Lid
Berichten: 195
Gepost op vrijdag 11 December 2009 08:48:19 QuoteWijzig

die delayms 1000; daar mee tel je steeds een seconden op?

zo ja dan is het ook niet zo gek dat hij niet meer gelijk loopt. omdat je nu een knop indruk staat het programma daar en gaat hij niet naar de delayms regel. als je hem loslaat gaat hij verder en daar wel naar toe. je moet dit stuk ook met een interrupt doen.

dus een timer een interrupt functie geven. (vraag me niet hoe in basic).

omdat je nu ook delayms1000 gebruikt staat je programma hier 1 seconde stil. nou is dat voor dit nog niet zo'n heel groot punt. maar in complexere dingen gaat het daar niet goed. zorg dus dat je hier een interrupt gebruikt

pascalbianca
Lid
Berichten: 1394
Gepost op vrijdag 11 December 2009 13:10:30 QuoteWijzig

Nou volgens mij heb ik de tijd in een interrupt staan, alleen als ik een toets indruk , stop hij laat de tekst zien 1.5sec. en gaat dan terug in zijn interrupt.

Maar zodra hij terug in zijn interrupt komt loopt de tijd natuurlijk omdat hij uit zijn interrupt is gewees, iets achter.

En dat wil ik dus niet.


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op vrijdag 11 December 2009 13:37:15 QuoteWijzig

Nee, je knoppen inlezen zit in je interrupt.

Bekijk deze code maar eens voor tijd interrupt:
http://www.elektronicastynus.be/Projecten/Klokken/Binair_BCD/index.php


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
leip11
Lid
Berichten: 195
Gepost op vrijdag 11 December 2009 18:07:53 QuoteWijzig


Code
//test met een klok op display
#include <hitachi.h>
#include <inputs.h>
#include <timers.h>
#include <avr/interrupt.h>

int main (void){                        //start programma

        displayInit(20,2);                //init
        inputsInit();
        timersInit();
        sei();
        
        int seconden=40;                    //variabele
        int minuten=59;
        int uren=23;
        int x=0;
        
        timersSet(1,1000,1);            //seconden timer
        
        displayBacklight(1);
        while(1){                        //start loop
            

            
            while(x==0){
                if(timersTriggered(1)){
                    seconden=seconden+1;
                
                }
            
                if(seconden==60){
                    seconden=0;
                    minuten=minuten+1;
                }
                
                if(minuten==60){
                    minuten=0;
                    uren=uren+1;
                }
            
                if(uren==24){
                    uren=0;
                }
                
                if(inputsGet(3)){
                    x=1;
                while(inputsGet(3));
                }
                
                
                displayBacklight(0);
                displayGotoXY(0,0);
                fprintf(display, "tijd %2d:%2d:%2d       ",uren,minuten,seconden);
                displayGotoXY(0,1);
                fprintf(display, "klok test              "
                
            }
            
            while(x==1){                //instellen voor de tijd
                
                if(inputsGet(1)){        //minuten instellen
                    minuten=minuten+1;
                while(inputsGet(1));
                }
                
                if(minuten==60){
                    minuten=0;
                }
                
                if(inputsGet(2)){        //uren instellen
                    uren=uren+1;
                while(inputsGet(2));
                }
                
                if(uren==24){
                    uren=0;
                }
                
                if(inputsGet(3)){
                    x=0;
                while(inputsGet(3));
                }
                
                displayBacklight(1);
                displayGotoXY(0,0);
                fprintf(display, "tijd %2d:%2d:%2d S3back",uren,minuten,seconden);
                displayGotoXY(0,1);
                fprintf(display, "minuten S1: uren S2"
            }
        }
    }



ik heb het zo gedaan(dan wel in C. nu is het ook zo dat als ik een knop indruk hij uit zijn klok stap. maar dat is hier niet zo heel erg. maar het gaat erom dat je klok op de interrupt loopt. hierboven gebeurt dat ook. voor basic zal het niet veel anders zijn
 
[Bericht gewijzigd door leip11 op Vrijdag 11 December 2009 18:08:14]

pascalbianca
Lid
Berichten: 1394
Gepost op zondag 13 December 2009 04:42:39 QuoteWijzig

Nou ik heb 2 dagen zitten te stoeien, en helaas ik geef het op.
Dan maar wachten tot volgend jaar dat die nieuwe magazine uitkomt.


http://pascalbianca.blogspot.nl/
dannymyron
Lid
Berichten: 46
Gepost op zondag 13 December 2009 09:49:30 QuoteWijzig

Heb vlug voorbeeldprogramma gemaakt met intterupt om u te helpen want ge hebt precies weinig geslapen !!!!!!!!!!
Gebruikt Kristal = 20 Mhz, Klok draait met Timer0 op interrupt
Dus de tijd wordt via intterupt bijgehouden, nauwkeurigheid hangt
af van kristal in dit geval +/- 10 sec/dag


Code
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Gijsbrechts Danny                                 *
'*  Notice  : Copyright (c) 2009 Gijsbrechts Danny              *
'*          : All Rights Reserved                               *
'*  Date    : 13/12/2009                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

Device 16F648A                                                  ' device name
 XTAL = 20
'LCD_LINES 4
'LCD_DTPORT = PORTD                                              ' LCD?s Data port
'LCD_DTPIN PORTD.4                             
'LCD_RSPIN = PORTD.2  
'LCD_ENPIN = PORTD.3
Symbol T0IF = INTCON.2                       ' TMR0 Overflow Interrupt Flag 
Symbol GIE = INTCON.7                        ' Global Interrupt Enable 
Symbol T0CS = OPTION_REG.5                   ' Timer0 Clock Source Select  
Symbol T0IE = INTCON.5                       ' TMR0 Overflow Interrupt Enable 

Dim seconden As Byte
Dim minuten As Byte
Dim Uren As Byte
Dim Dag As Byte
Dim WeekDag As Byte
Dim Timer1 As Byte                           ;Telt 1/120 seconden
Dim Timer2 As Byte                           ;Telt 1/4 seconden
Dim Dagtekst[4] As Byte
Dim teller As Byte
On_hardware_interrupt GoTo Interrupt

GoSub Init_Sub

GoTo Hoofdprogramma


; **************************************************************** 
; **                         Interrupt Handler                  **         
; ****************************************************************      

Interrupt:    
    If T0IF = 0 Then exit_interupt
    TMR0 = 94 ;94                            '1/120sec interrupt
    
    Inc Timer1
    
    Select Timer1
                   Case 30                                                   '0.25sec
                          Timer2 = 0
                          
                   Case 60                                                   '0,5sec
                          Timer2 = 1
                                                    
                   Case 90
                          Timer2 = 2                                         '0,75sec
                          
                   Case = 120       
                          Timer2 = 3:Timer1 = 0                              '1sec
                          Inc seconden 
    EndSelect
    
    If seconden = 60 Then 
       seconden = 0
       Inc minuten
    EndIf
        
    If minuten = 60 Then
       minuten = 0
       Inc Uren
    EndIf
    
    If Uren = 24 Then
       Uren = 0
       Inc Dag
    EndIf   
    
    If Dag = 7 Then Dag = 0
    T0IF = 0                                             ' Clear the TMR0 overflow flag 
     
eror:

exit_interupt:
  
Context Restore                                           ' Restore the registers and exit interrupt

; **********************************************************
; **                    Initialisatie                     ** 
; **********************************************************

Init_Sub:
Cls
Clear
GIE = 0                                            ' interrupt afzetten 
OPTION_REG = %00000111                             ' Initiate the interrupt
T0CS = 0                                           ' Assign TMR0 clock to internal source 
TMR0 = 94                                          ' timer0 = 94
T0IE = 1                                           ' Enable TMR0 overflow interrupt 
GIE = 1    

Uren = 10
minuten = 59
seconden = 50
Dag = 6

Return
; **********************************************************
; **                   Hoofdprogramma                     ** 
; **********************************************************
Hoofdprogramma:

Inc teller
Select Dag
       Case 0
            Str Dagtekst = "Ma",0
       Case 1
            Str Dagtekst = "Di",0  
       Case 2
            Str Dagtekst = "Wo",0
       Case 3
            Str Dagtekst = "Do",0 
       Case 4
            Str Dagtekst = "Vr",0
       Case 5
            Str Dagtekst = "Za",0  
       Case 6
            Str Dagtekst = "Z0",0 
EndSelect                        
Select Timer2
       Case 0
            Print At 1,1,Str Dagtekst," ",DEC2 Uren,":",DEC2 minuten ,":",DEC2 seconden
       Case 2
            Print At 1,1,Str Dagtekst," ",DEC2 Uren," ",DEC2 minuten ," ",DEC2 seconden  
EndSelect
; *************** Hier verder gaan met programma **********
GoTo Hoofdprogramma


 
[Bericht gewijzigd door dannymyron op Zondag 13 December 2009 10:17:59]

pascalbianca
Lid
Berichten: 1394
Gepost op zondag 13 December 2009 16:08:50 QuoteWijzig

Dank je wel dannymyron, zal er morgen eens na kijken op mijn gemak, neem vandaag even rust.
Kan het zijn als je geen kristal erbij heb staan , dat die tijd heel langzaam loopt?


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op maandag 14 December 2009 08:58:18 QuoteWijzig

Ik heb eens gekeken erna en heb inmiddels ook al een menu eraan gekoppeld.

Nu zit ik nog met een ander vraag/probleem.
Op de 2 poorten waar die kristal moet heb ik 1 druk knopje zitten, als ik die kristal daarbij zet , gaat dat dan of werkt die knop/kristal dan niet meer?


http://pascalbianca.blogspot.nl/
leip11
Lid
Berichten: 195
Gepost op maandag 14 December 2009 14:25:36 QuoteWijzig

knop gaat niet werken die wordt door de instelling van het kristal uitgeschakelt als knop. je kan wel rare dingen krijgen. knop dus op een andere plek zetten

[1] 2 »

Active Topics

» Subaru Outback 2016
» Stofafzuiging
» Aanpassingen aanbouwde...
» Audi
» Show je mini projecten
» Puls schkelaar
» Draadknipper
» Intercom
» buske (Peugeot Boxer 2...
» Voeding 24V 3A Stynus

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2019 SchemaTheek
Laadtijd: 0.09591 sec.