instelbare deler via up/down toets

Ik zit met een digitaal probleem, voor een digitale deler schakeling, PLL heb ik de BCD code nodig welke delen door 3300 tot en met 5300 via de 13 bits adres lijnen activeerd.
De uitgang mag daarbij binair of in BCD code zijn.
Voor die PLL kan ik de deler natuurlijk handmatig via een BCD code schakeling instellen maar nog mooier is omdat automatisch dmv. een up/down teller in te stellen.
Hiervan zoek ik een schakeling welke makkelijk zelf te maken is, met TTL of C-mos logische componenten.

Omdat via een PIC of een Arduino (processor) te doen is voor mij niet te doen, omdat ik hiermee geen ervaring heb.
Wat ook een hele goede manier is om die deelfactor in te stellen met een Rotary decoder, dan komt die up/down met twee moment schakelaars te vervallen.

Telefunken Sender Systeme Berlin

Ik snap niet hoe jij de term "BCD" gebruikt. 3300-5300 zou ongeveer 15 bits zijn in BCD maar is 13 bits indien binair.

Wat heeft je PLL nodig? 13 bits binair? Oh... Alletwee. Luxe.

Ik vond voor je:
https://www.electronics-tutorials.ws/counter/bcd-counter-circuit.html

Die wil je dan uitbreiden naar meerdere segmenten. Oh. Staat al aangegeven richting de onderkant van de pagina. Ik geloof dat de 7490 geen "down" functie heeft. Dan is er vast een 74xx chipje die dat wel heeft. (ik laat de letters na 74 weg: voor nu maken die even niet uit).

Edit: Kan het niet laten.... De 74192/193 zijn updown BCD counters.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Rew bedankt voor de nuttige link, hier kan ik veel uithalen.
Inderdaad zijn het bijna 15 bits in BCD en ik kwam op 2 macht 13 is 8192 binair.
De 74LS191 is ook een up-down counter.

Telefunken Sender Systeme Berlin

Duhh ik word oud ofwel werkt de koffie nog niet, na 5x de vraag te hebben gelezen begrijp ik nog altijd niet wat je wilt.

LDmicro user.

Ik snap op zich dat je geen arduino wilt omdat je dat geen ervaring mee hebt, maar op die manier krijg je de ervaring ook niet, terwijl dit naar mijn idee echt een prima beginnersprojectje zou zijn. Echt, er gaat een wereld aan mogelijkheden voor je open als je daaraan begint!

Ik wil je wel helpen met het schrijven van de code, en ik weet zeker dat ik niet de enige ben.

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

Een deler met een Arduino is volgens mij niet snel genoeg of bedoel je een elektronische instelbare BCD schakelaar ter vervanging van duimwielschakelaars.
Het is mij nog altijd niet duidelijk.

LDmicro user.
Arco

Special Member

Staat in de startpost...
TS wil een up/down counter van 3300 tot 5300 met druktoetsen voor up/down en BCD outputs.
Is met een picje simpel te maken...

[Bericht gewijzigd door Arco op dinsdag 18 oktober 2022 12:04:30 (14%)

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

Op 18 oktober 2022 12:03:41 schreef Arco:
Staat in de startpost...
TS wil een up/down counter van 3300 tot 5300 met druktoetsen voor up/down en BCD outputs.

Ah zo, dat is wel begrijpbaar ;) is wel iets anders dan een deler zoals in de titel staat, vandaar mijn twijfel.

LDmicro user.

MGP, ik bedoel een schakeling welke de gebruikelijke BCD duimwiel schakelaars vervangt.
De uitgang daarvan zijn 16 adreslijnen in groepjes van viermaal A,B,C,D.

Sparky GSX heel erg bedankt voor het aanbod. Ik kan mij voorstellen dat dit een printplaatje overbodig maakt en de schakeling zelf een heel stuk kleiner wordt. Ik denk er even over na.

Op zich stelt de schakeling niet veel voor gewoon viermaal de 74LS191 of 192.
Met een blokgolf generator'tje welke de pulsjes voor omhoog en omlaag tellen maakt.
Heb ik het goed zo?
Meer is het niet. Eventueel kan op elke 74LS191 een 7 segment decoder aangesloten worden
met een 7 segment led display, maar dat hoeft niet eigenlijk, want ik meet de frequentie van de instelbare deler en dat is ook voldoende.

Telefunken Sender Systeme Berlin

Op 18 oktober 2022 12:10:23 schreef Martin V:
Op zich stelt de schakeling niet veel voor gewoon viermaal de 74LS191 of 192.
Met een blokgolf generator'tje welke de pulsjes voor omhoog en omlaag tellen maakt.
Heb ik het goed zo?

Zou ik niet doen, gebruik een controller enkel en alleen al voor het gebruikersgemak.
Je hebt een goede anti contactdender vandoen en een handbediende teller is ofwel te traag of te snel want er zit een groot verschil tussen 1puls of 100den pulsen verstellen.

Uw schakeling is goed voor bv een 100 teller maar het verschil tussen 3300 en 5300 verstellen is qua bediening minder makkelijk.

Een dynamische instelling is wat je nodig hebt.

LDmicro user.
Arco

Special Member

Dit zou moeten werken voor een PIC16F1936 (Mikrobasic. niet getest)
Toetsen op RA0 en RA1 naar Vcc met pull-down weerstand, bcd output op Port B en C. Interne oscillator op 500kHz.
Auto-repeat na 1 seconde. Ontdendertijd is 50mS. Wrap-around bij Min/Max waarde. Hex file attached...


'==================================================================================================
'                       PortC                     |                     PortB
' |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
' |        digit 4        |        digit 3        |        digit 2        |        digit 1        |
'==================================================================================================  
Program Test

Dim KeyUp     As sbit at PORTA.B0
    KeyDn     As sbit at PORTA.B1

Dim Cnt       As Word
    KeyCnt    As Byte
    KeyRepCnt As Byte
    Flags     As Byte
    fRep      As sbit at Flags.0

Const MINCNT   = 3300
      MAXCNT   = 5300
      STARTCNT = 3300
      REPTIME  = 8  'x10ms
      DEBOUNCE = 5  'x10ms
'========================================================================================
Sub procedure Interrupt() iv 0x0004 ics ICS_AUTO
'========================================================================================
  If TMR2IF_bit = 1 Then
    If (KeyUp) Or (KeyDn) Then
      If KeyCnt < 250 Then Inc (KeyCnt) End If
      If KeyCnt = 100 Then fRep = 1 End If
      If KeyUp then
        If KeyCnt = DEBOUNCE Then
          If Cnt > MAXCNT Then Cnt = MINCNT Else Inc(Cnt) End If
        End If
        If fRep Then
          Inc(KeyRepCnt)
          If KeyRepCnt >= REPTIME Then 
            If Cnt > MAXCNT Then Cnt = MINCNT Else Inc(Cnt) End If
            KeyRepCnt = 0
          End If
        End If
      End If
      If KeyDn Then
        If KeyCnt = DEBOUNCE Then
          If Cnt < MINCNT Then Cnt = MAXCNT Else Dec(Cnt) End If
        End If
        If fRep Then
          Inc(KeyRepCnt)
          If KeyRepCnt >= REPTIME Then
            If Cnt < MINCNT Then Cnt = MAXCNT Else Dec(Cnt) End If
            KeyRepCnt = 0
          End If
        End If
      End If
    Else
      fRep   = 0
      KeyCnt = 0
      KeyRepCnt = 0
    End If
    TMR2IF_bit = 0
  End If
End Sub

'========================================================================================
Sub Procedure Init()
'========================================================================================
  TRISA  = 0x03    ANSELA = 0
  TRISB  = 0x00    ANSELB = 0
  TRISC  = 0x00
  PR2    = 124
  T2CON  = %01001100
  TMR2IE_bit = 1
  GIE_bit    = 1
  PEIE_bit   = 1
  Cnt = STARTCNT
End Sub

'========================================================================================
main:

'========================================================================================
  Init()
  while true
    LATB = Lo(Dec2BCD16(Cnt))
    LATC = Hi(Dec2BCD16(Cnt))
    Delay_ms(10)
  wend
End.
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco

Special Member

Heb de code nog wat aangepast, er zaten wat puntjes die verbeterd konden worden...

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

Persoonlijk zou ik er nog een I2C schermpje aan hangen zodat je de huidige deelfactor kunt weergeven, dat kost maar 2 PI/O pinnen. Daarbij lijkt en encoder me eigenlijk prettiger om het mee in te stellen dan knopjes, maar dat ligt eraan wat je er precies mee wilt doen.

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

Special Member

TS heeft al een frequentie uitlezing, dus dat zou dubbelop zijn.
(je kunt zoals hij zegt natuurlijk altijd een 7 segment display/decoder aan elke poort hangen)

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

Op 19 oktober 2022 00:22:26 schreef SparkyGSX:
Daarbij lijkt en encoder me eigenlijk prettiger om het mee in te stellen dan knopjes, maar dat ligt eraan wat je er precies mee wilt doen.

Dat werkt idd prettiger maar weinig goed verkrijgbare encoders voldoen om zoiets te implementeren.
Het probleem is hier de 2000steps die je vloeiend moet kunnen overbruggen en binnen redelijke tijd, anders is het een lijdensweg.

LDmicro user.
mel

Golden Member

Ik heb wel eens encoders gebruikt voor pulsgever, dit gaat vrij goed.
met encoders bedoel ik dan richting gevers die je op een as zet om de richting en de snelheid te bepalen.

[Bericht gewijzigd door mel op woensdag 19 oktober 2022 08:12:27 (44%)

u=ir betekent niet :U bent ingenieur..
Arco

Special Member

Met up/down toets is ook goed werkbaar. Bij auto-repeat doet 'ie nu 12.5 stappen per seconde, maar dat kan indien nodig natuurlijk veel sneller.
Meestal wil je zoeken binnen een bepaald gebiedje, en ga je niet als een wilde van het ene uiteinde naar het andere springen... (niet al te snel is dan juist een pré...)

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

Ik heb nog zitten nadenken om het analoog te doen: Een condensator laad langzaam op en bepaalt de frequentie van een oscillator die dan de counters aanstuurt. edit: ... iets verder uitgewerkt: Condensator laad op tot 5V indien schakelaar niet ingedrukt. met de schakelaar ingedrukt ontlaad de condensator en dan een zaagtand 10V/sec van nul tot de condensator spanning. Zodra de condensatorspanning bereikt is ontlaad je de zaagtand condensator snel en begin je overnieuw. Met de 10V/sec heb ik de eerste puls in ongeveer een halve seconde. Door de timing condensator niet naar nul maar naar zeg 0.1V te laten ontladen kan je een max stepsnelheid bereiken (met 10V/sec wordt dat dan 100 steps per sec.)

Met 12 steps per seconde doe je de eerste stap na 80ms. Het is voor de meeste mensen lastig om een knop in te drukken en binnen 100ms weer los te laten. Je moet minstens de eerste 1 of 2 repeats overslaan om ook een "step-by-one" prettig mogelijk te maken.

[Bericht gewijzigd door rew op woensdag 19 oktober 2022 10:38:11 (39%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Zie commentaar bij code, auto-repeat begint pas na 1 seconde... ;)

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

Op 19 oktober 2022 09:34:33 schreef Arco:
...
Meestal wil je zoeken binnen een bepaald gebiedje, en ga je niet als een wilde van het ene uiteinde naar het andere springen... (niet al te snel is dan juist een pré...)

Dat is niet zeker, als je de laatste stand van de knop niet onthouden hebt en je zit voortdurend in de hoogste getallen te zoeken moet je elke keer dat je opstart naar de hoogste stand draaien.

LDmicro user.

Op 19 oktober 2022 10:33:11 schreef Arco:
Zie commentaar bij code, auto-repeat begint pas na 1 seconde... ;)

Sorry. Had ik geskipped: zowel Basic- als PIC code ga ik niet voor de lol lezen. :-)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Ik heb hetzelfde met C... :)
Versie met autosave/restore na 10 seconden van inactiviteit met keyup/down toetsen:


'==================================================================================================
' |                     PortC                     |                     PortB                     |
' |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
' |        digit 4        |        digit 3        |        digit 2        |        digit 1        |
'==================================================================================================  
Program Test

Dim KeyUp     As sbit at PORTA.B0
    KeyDn     As sbit at PORTA.B1

Dim Cnt       As Word
    KeyCnt    As Byte
    KeyRepCnt As Byte
    SaveCnt   As Word
    Flags     As Byte
      fRep    As sbit at Flags.0
      fSave   As sbit at Flags.1

Const MINCNT    = 3300
      MAXCNT    = 5300
      STARTCNT  = 3300
      REPTIME   = 8
      DEBOUNCE  = 5
      SAVETIME  = 1000
      EEADDRESS = 0x20
'========================================================================================
Sub procedure Interrupt() iv 0x0004 ics ICS_AUTO
'========================================================================================
  If TMR2IF_bit = 1 Then
    If (KeyUp) Or (KeyDn) Then
      If KeyCnt < 250 Then Inc (KeyCnt) End If
      If KeyCnt = 100 Then fRep = 1 End If
      If KeyUp then
        If KeyCnt = DEBOUNCE Then
          If Cnt > MAXCNT Then Cnt = MINCNT Else Inc(Cnt) End If
        End If
        If fRep Then
          Inc(KeyRepCnt)
          If KeyRepCnt >= REPTIME Then
            If Cnt > MAXCNT Then Cnt = MINCNT Else Inc(Cnt) End If
            KeyRepCnt = 0
          End If
        End If
      End If
      If KeyDn Then
        If KeyCnt = DEBOUNCE Then
          If Cnt < MINCNT Then Cnt = MAXCNT Else Dec(Cnt) End If
        End If
        If fRep Then
          Inc(KeyRepCnt)
          If KeyRepCnt >= REPTIME Then
            If Cnt < MINCNT Then Cnt = MAXCNT Else Dec(Cnt) End If
            KeyRepCnt = 0
          End If
        End If
      End If
      SaveCnt = 0
    Else
      fRep   = 0
      KeyCnt = 0
      KeyRepCnt = 0
      If SaveCnt < SAVETIME Then
        Inc(SaveCnt)
        If SaveCnt = SAVETIME Then fSave = 1 End If
      End If
    End If
    TMR2IF_bit = 0
  End If
End Sub

'========================================================================================
Sub Procedure Init()
'========================================================================================
  TRISA  = 0x03    ANSELA = 0
  TRISB  = 0x00    ANSELB = 0
  TRISC  = 0x00
  Flags  = 0
  PR2    = 124      'Timer2 interrupt 500000/4/125/10 = 10ms
  T2CON  = %01001100
  TMR2IE_bit = 1
  GIE_bit    = 1
  PEIE_bit   = 1
  Hi(Cnt) = EEProm_Read(EEADDRESS)
  Lo(Cnt) = EEProm_Read(EEADDRESS+1)
  If (Cnt < MINCNT) or (Cnt > MAXCNT) Then Cnt = STARTCNT End If
End Sub

'========================================================================================
main:

'========================================================================================
  Init()
  while true
    LATB = Lo(Dec2BCD16(Cnt))
    LATC = Hi(Dec2BCD16(Cnt))
    If fSave Then
      EEProm_Write(EEADDRESS, Hi(Cnt))
      EEProm_Write(EEADDRESS+1, Lo(Cnt))
      fSave = 0
    End If
    Delay_ms(10)
  wend
End.
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 19 oktober 2022 11:06:53 schreef Arco:
Versie met autosave/restore na 10 seconden van inactiviteit met keyup/down toetsen:

Ik had daar nog een leuke bug mee laatst. Nieuwe bridgeklok naar de club meegenomen.... Na een paar minuten: crash: loopt niet verder. Grmbl. Dus thuis geprobeerd: Werkt prima. Weer naar de club: Werkt prima.

Dan thuis verder werken aan de software... Blijkt dat als je de instellingen (mogelijk) gewijzigd hebt die autosave na zoveel tijd plaatsvind. Ik had de software geport van STM32 naar RP2040 en vergeten een klein stukje infrastructuur op te zetten om de "save-to-flash" te laten werken.

Ik heb dus eerst thuis en later de 2e keer op de club gewoon mazzel gehad dat de "er is mogelijk wat gewijzigd" niet getriggerd was. (die staat iets te gevoelig: Hij triggert ook als je niets wijzigt). (De RP2040 is een beetje tricky: Je mag GEEN code uit flash uitvoeren als er een flash-write loopt. De STM32 stopt gewoon tot het klaar is).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Zo daar ben ik weer. Arco heeft al een code geschreven voor een Pic, maar wat doe ik daar verder mee.
En hoe sluit ik die 16 data lijnen aan op de Pic.
Om even terug te komen op een schakeling met TTL ic´s kan ik mij herinneren dat zo schakeling ook eens heeft gestaan in het blad Electron van de Veron.
Dat artikel was getiteld 400 kanalen op een bepaalde tranciever, dat is alles wat ik er nog van weet te herinneren.
Daar stond ook in hoe dat bestuurd kan worden met een optische encoder.

Dat aansluiten op een optische encoder moet heel makkelijk zijn, het gaat op een flip/flop schakeling die de pulsjes maakt, het fijne weet ik er echter niet van.
Is er iemand die hier een voorbeeld van heeft.
Draaien aan een knop lijkt mij makkelijker als drukken op een up of down teller.

De rest van de schakeling is makkelijk te tekenen en ik heb het schema al aardig uitgewerkt in mijn hoofd zitten.

Het instellen van een preset van de tellers kan ik toch doen door de input lijnen A,B,C,D op logisch 1 of nul nivo te zetten.
Dan begint de teller vanaf een bepaalde waarde 3300 te tellen.
Hoe ik dat moet doen is wat proberen, het fijne weet ik er niet van.
edit in een schema van een frequentie teller wordt de 74HC190 gebruikt dat is een synchronous up down counter met down up mode control waar de ingangen A,B,C,D op logisch 1 of nul worden gezet met een dip schakelaar.

edit even een kleine zoekactie op google geeft genoeg voorbeelden om een optische encoder aan te sluiten op een flip flop.

Telefunken Sender Systeme Berlin