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: 23
23 gasten
0 leden:
Forum > Digitaal > 16F628A extra geheugen?
[1] 2 3 »
pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 8 Januari 2014 15:51:51 QuoteWijzig

Ik ben met een menu bezig voor mijn relai kaart,
Maar nu kom ik steeds tegen de grens aan dat hij bijna vol raakt , terwijl mijn menu gebeuren nog niet klaar is.
Is er een mogelijk door een geheugen ic erbij te plaatsen , zo ja welke en is er een schema van?

http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op woensdag 8 Januari 2014 17:46:26 QuoteWijzig

Neem dan de 648A

pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 8 Januari 2014 18:03:37 QuoteWijzig

Sorry foutje in mijn titel zie ik, ik heb namelijk een 16F648Ain gebruik.


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op woensdag 8 Januari 2014 18:46:02 QuoteWijzig

LCD. Print At , opdrachten vreten letterlijk geheugen.
Dus probeer die zoveel mogelijk te vermijden, als het even kan.
Anders;
Gebruik voor vergelijkbare menu's 'strings' en plaats 'Print At' in subroutine(s),
kan ook helpen.

Vermijd zowiezo (horizontale) scroll menu's.

pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 8 Januari 2014 19:37:35 QuoteWijzig


Quote
Vermijd zowiezo (horizontale) scroll menu's.


Die heb ik net wel gemaakt aangezien ik 8 relais wil schakelen.
Hoe zou jij dat doen eventueel als je 8 relais wilt schakelen en je hebt een lcd en 4 knoppen ter beschikking?


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op woensdag 8 Januari 2014 21:00:17 QuoteWijzig

Lijkt me niet echt handig om met een eigen menu te komen.
Als die sterk afwijkt van die van jou, wordt het alleen maar lastiger.

Geef even 'n listing van de Menu's MET een verkort bericht van naar
bv. naar relais 1 & 8.
Dan kunnen we meedenken.

Stynus
Admin
Berichten: 2776
Gepost op woensdag 8 Januari 2014 21:00:31 QuoteWijzig

Ik gebruik dan meestal een 16F1827, als die vol is kan je ook nog naar een 16F1847 gaan.

EDIT:
Let bij die nieuwe generatie pics wel op, als je naar uitgangen wil schrijven doe je dat niet naar het port maar naar het lat register. Uitlezen moet dan weer wel van het port register.
Als je hier niet aan denkt krijg je soms rare effecten.

EDIT2:
Die 16F1827 heeft blijkbaar evenveel ruimte als de 648. Dan blijft alleen die andere nog over. Of je moet een pic met meer pinnen gebruiken, dan vind je wel nog veel grotere.
 
[Bericht gewijzigd door Stynus op Woensdag 8 Januari 2014 21:08:52]


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 9 Januari 2014 02:46:21 QuoteWijzig

Stynus@ , ik wil die print niet opnieuw gaan maken , maar met het bestaande verder gaan.

Henk@
Het menu zou moeten bestaand uit 2 opties , namelijk relais kunnen inschakelen en terug naar ontvangst modus.
Dat laatste is geen probleem, maar dat eerste wil ik zo kort mogelijk en effici?nt mogelijk en dat wil niet echt lukken.
Had een scroll menu, maar zoals jij al zei, het vreet geheugen.

De bediening waarop de knoppen werken is zo.:

Code
 If Weerstand < 31 Then            ;Toets 1 ingedrukt dan... (Omlaag)
    ElseIf Weerstand < 282 Then       ;Toets 2 ingedrukt dan... (Omhoog)
    ElseIf Weerstand < 580 Then       ;Toets 3 ingedrukt dan... (enter menu)
    ElseIf Weerstand < 910 Then       ;Toets 4 ingedrukt dan... (bevestig)
        EndIf


 
[Bericht gewijzigd door pascalbianca op Donderdag 9 Januari 2014 02:48:40]


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 9 Januari 2014 05:01:35 QuoteWijzig

Ik heb als test het volgende stukje om te kijken of het tellen lukt in een menu.

Code

 Dim rechts As Byte  ;Deze Teller kan tot max.255 tellen (BYTE = 255)
 rechts = 0 
' dim links as byte 
 Dim bevestig As Byte  ;Deze Teller kan tot max.255 tellen (BYTE = 255)
bevestig = 0

labelinfo2:
    Print At 1,1,"Bedien Relai    "
    ;Print At 2,1,"1 2 3 4 5 6 7 8 " 
    While 1=1 
        If Toets = AAN Then                 ;Als er op een toets wordt gedrukt dan...
        GoSub Toetsontladen
        
            If Weerstand < 31 Then            ;Toets 1 ingedrukt dan... (Omlaag)
                rechts = rechts + 2
                
            ElseIf Weerstand < 282 Then       ;Toets 2 ingedrukt dan... (Omhoog)
                rechts = rechts - 2
                
            ElseIf Weerstand < 580 Then       ;Toets 3 ingedrukt dan... (enter menu)
                Inc aanuit
               ; if aanuit = 2 then aanuit = 0
            ElseIf Weerstand < 910 Then       ;Toets 4 ingedrukt dan... (bevestig)
                bevestig = 1
            EndIf
            
            If rechts = 18 Then rechts = 0
            If rechts = 254 Then rechts = 0
            
            While Toets = AAN : Wend          ;Wacht hier tot toets(en) wordt losgelaten
                DelayMS 15
         Print At 2,1, Dec2 rechts       
                
        EndIf
    
    
    Wend
End


Dus in mijn code druk ik toets 1 in telt hij op met 2 dus 00-02-04-enz.
Zodra hij bij waarde 18 komt, dus buiten het scherm dan terug naar 0 zetten en vanaf daar doorgaan.
Dit geld ook voor terug tellen.
Maar willekeurig blijft hij gewoon ergens hangen en doet hij niks meer, aan de rest van de code ligt het niet want dat werkt vlekkeloos.
Waar loopt het mis?
 
[Bericht gewijzigd door pascalbianca op Donderdag 9 Januari 2014 05:10:14]


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op donderdag 9 Januari 2014 13:21:19 QuoteWijzig

Ach ja, die drukknoppen die vragen ook om 'n aparte subroutine, je zult deze vaak aanroepen.
Ik zie dat dat je een GoSub doet naar Toetsontladen, nu nog voor de toetsen zelf.
Zodat je in het programma zelf kunt volstaan NA een GoSub aanroep;

If toets_omhoog = 1 then...
enz.
In de toets subroutine komt dan zoiets van
If Weerstand < 282 Then
toets_omhoog = 1
Else
toets_omhoog = 0

Wat ik bedoel met menu strings is dit als voorbeeldje misschien wel duidelijk;

Code

StringVar var byte

Stringvar = relais[1]
gosub string

Stringvar = relais[2]
gosub string

Stringvar = relais[3]
gosub string
;
;

string:
Print At 1,1, Dec2 Stringvar
return



Verder is in jouw laatste 2 posting de menu(s) me nog niet geheel duidelijk,
misschien doordat je het eea. al probeert om te zetten in een stukje subroutine.

pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 9 Januari 2014 16:07:49 QuoteWijzig

Dat laatste met het menu heb ik al inderdaad zoveel geprobeerd en met al mijn kennis van Visual Basic waar dit op lijkt een beetje krijg ik niet voor elkaar om binnen de grenzen van het geheugen te blijven.

Ik ben me aan het bedenken om anders toch maar de relai kaart om te bouwen zodat een zwaardere IC erin kan, de gedachte was een 18F4550.
deze heeft 32K geheugen.
Dan kan ik ook een 20*4 lcd erop.

Maar dan het het wel weer in dat ik weer terug aan de teken tafel moet.
En dan ga ik mij afvragen of ik dan wel voldoende heb aan een 78S05 die 2amp. is of dat die niet te wam gaat worden of dat ik een andere 5V regulator hiervoor moet gaan nemen die niet zo snel warm word.


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2776
Gepost op donderdag 9 Januari 2014 16:40:40 QuoteWijzig

Zet er dan die 16F1847 op, die is pin compatibel en heeft meer ruimte.

Hoe kom je bij deze print aan 2A?


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 9 Januari 2014 17:30:13 QuoteWijzig


Quote
Zet er dan die 16F1847 op, die is pin compatibel en heeft meer ruimte.

Waar kan ik die krijgen want Norbert heeft ze niet.


Quote
Hoe kom je bij deze print aan 2A?


Sorry was een foutje van me.

Trouwens ik heb eens gekeken op de datasheet van die 16F1847, hier.: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en549760 staat vermeld dat die 14K geheugen heeft, maar als ik bij voti kijk, hier http://www.voti.nl/winkel/catalog.html?PIC-16F1847-DIP staat er 8K, welke is correct?
 
[Bericht gewijzigd door pascalbianca op Donderdag 9 Januari 2014 17:45:23]


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op donderdag 9 Januari 2014 19:13:42 QuoteWijzig

Ik denk dat Voti een type foutje heeft gemaakt.

Maar ik begrijp niet dat 4k memory te weinig is.
Als ik jouw topics samenvat dan is het een kwestie inlezen van ontvanger
(wat de zender verstuurd), toewijzen aan de I2C I/O expander, knoppen inlezen en waarden
weergeven in het LCD.
Wat missen we??

Terug denkend aan de postings van mij, hier, kon ik met 3-drukknoppen alles bedienen.
Bv. de 628A (PS/2 Keyboard) heb ik heel veel kunnen scrappen, en alles wat maar 2x dezelfde keer wordt gebruikt, zet ik om in 'n subroutine, en doe een GoSub aanroep, weer ruimte vrij.
Die 628A doet veel, 60minuten decrement counter (24/7), PS/2 toetsen emuleren, div. strings increment's en decrement's, wegschrijven naar Eeprom, Eeprom uitlezen, extra programmeerbare delay's om de 60minuten op een 0,125seconde te benaderen, LCD minuten uitlezen...
enz.



foutjes gecorrigeerd.

 
[Bericht gewijzigd door Henk (NL) op Donderdag 9 Januari 2014 19:21:09]

pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 9 Januari 2014 20:23:29 QuoteWijzig

Alles tonen wat hij ontvangt en laat zien wat geschakeld is werkt.
Wat ik niet voor elkaar krijg is de unit zo te bedienen met 4 knoppen om de 8 relais apart te schakelen en eventueel te onthouden welke aan/uit is.

Met de kennis van mijn in VB red ik het niet dit binnen het geheugen te houden, en in picbasic weet ik niet geheel om dit kort en netjes te houden.
Als ik iets meer geheugen heb zou ik het net redden denk ik.

Daarom vraag ik de hulp van jullie.


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op donderdag 9 Januari 2014 21:16:07 QuoteWijzig

In het hoofdprogramma lijkt me dit wel wat, maar dat is gewoon 'n idee.
Het LCD bv. zo indelen;
1e regel Relais: 12345678; Ontvangen is bv. Relais: ---4-6-8 ,de rest is niet ontvangen.
2e regel On-Off: 1--456-8, Relais status,
Relais 1 en 5 zijn al aan, omdat al eerder iets is verstuurd.

Eigenlijk is regel 1 de nieuw(ste) ontvangen data,
En regel 2 de status van jouw relais aan, getal uit is -

Lijkt mij overzichtelijk, en kost weinig programma ruimte.

Probeer hier na toe te werken, het is als advies.
Als het verder niet lukt, misschien kun dan de listing ergens posten zodat knappe koppen je verder op weg helpen.
Het beste in als .txt bestand ipv. de hele topic vullen.

 
[Bericht gewijzigd door Henk (NL) op Donderdag 9 Januari 2014 21:18:25]

pascalbianca
Lid
Berichten: 1394
Gepost op vrijdag 10 Januari 2014 03:14:57 QuoteWijzig

Ik heb je advies van weergave aangenomen.
1 vraagje betreffende de code , die ik nu gebruik.
Ik heb idem zoals de kanalen deze als bits aangemaakt, dus zo.:

Code
uitgangen_memory.0 = 0
uitgangen_memory.1 = 0
uitgangen_memory.2 = 0
uitgangen_memory.3 = 0
uitgangen_memory.4 = 0
uitgangen_memory.5 = 0
uitgangen_memory.6 = 0
uitgangen_memory.7 = 0



Bij het inschakelen van een relai maak ik van die 0 een 1.
Als ik dan in het menu de keuze maak om te tonen welke relais aan zijn, had ik gedacht dit te plaatsen.:

Code
While 1=1
        Print At 1,1, "Relais: 12345678"
        Print At 2,1, "On/Off: "
        Print At 2,9, Bin8 uitgangen_memory ; @uitgangen_memory
      
    Wend


Maar op 1 of andere manier word de eerste nul (dus als ik zeg dat kanaal1 uit staat en kanaal 2 aan) weg gelaten, dus i.p.v. 01000000 word 10000000 getoond.
Hoe kan ik dit wel doen?
Als het zou kunnen misschien dat wat Henk@ toonde met bv. 12-4---78 maar dat krijg ik niet voor elkaar.
 
[Bericht gewijzigd door pascalbianca op Vrijdag 10 Januari 2014 03:18:01]


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2776
Gepost op vrijdag 10 Januari 2014 11:06:26 QuoteWijzig

Hou je er rekening mee dat de volgorde 76543210 is? Zit je niet aan de verkeerde kant te kijken?


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Henk (NL)
Lid
Berichten: 263
Gepost op vrijdag 10 Januari 2014 11:11:57 QuoteWijzig

Ik heb dit nog niet getest, maar als je SBin8 gebruikt wat is dan het resultaat?

LCD regel 1 bedoel ik ongeveer hetzelfde als regel 2 dus,

Code

Print At 1,1, "Relais: "
Print At 1,9, bin8 ingangen_memory ; memory ingangen 


Later als er voldoende ruimte is,
kun je dit alsnog naar 1t/m8 ingang weergeven ipv. bits

Alvast 'n voorproefje hoe dit eruit ziet 'quick & dirty'

Code

    If xxxx_bit = 1 Then
                      '1234567890123456 = 16LCD posities
        Print At 1,9, "1"
    Else
                      '1234567890123456 = 16LCD posities
        Print At 1,9, " "   
    EndIf   



Natuurlijk wordt dit met alle bits 1-8 eerst opgebouwd aan dan als strings in een keer op LCD gezet, maar het gaat om het simpel houden en het idee er achter te begrijpen.
 
[Bericht gewijzigd door Henk (NL) op Vrijdag 10 Januari 2014 11:15:27]

pascalbianca
Lid
Berichten: 1394
Gepost op vrijdag 10 Januari 2014 15:49:25 QuoteWijzig

Hoi Henk@, bij je eerste test code krijg ik waarden in binair vorm , dus dat was ook niet wat werkte.
Je 2de code werkt wel naar behoren en ben er tevreden mee.
Maar hoe moet ik nu beginnen als ik 1 van die On/Off wil gaan zetten?


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op vrijdag 10 Januari 2014 18:14:25 QuoteWijzig


Quote
Je 2de code werkt wel naar behoren en ben er tevreden mee.


Geen wonder ik ook, dit is ook toegepast bij m'n 'schakelklok' Easygreen.
Daar had ik alle ruimte dus ik kon gewoon doorgaan op die manier,
maar ik denk dat het zo misschien bij jou niet opgaat.

Ik wil eerst weten, voordat we verdergaan, hoeveel % ruimte heb je nog hebt,
wat zegt de compiler van je?

Want als dit te weinig is dan is een tussen stap nodig, dwz, eerst alles inlezen, zowel de ingang van de ontvanger (regel1), en de toestand van de relais (regel2),
betekend wel dat we vaak de 'Dim' opdracht gebruiken 16x om variabelen 'bytes' te definieren.
(en waarschijnlijk ook nog extra 'Dim' var. Bits, daar kom ik nog op terug)
Dat deed ik bij m'n SMD-oven ook al, om die manier niet te vaak 'Print At' als opdracht uitvoeren.

Eigenlijk een paar keer;

Print At 1,9 Dec1 In1 t/m In8 hier zijn dus 8x Dim variable byte nodig
Print At 2,9 Dec1 Relais1 t/m Relais8, en hier ook

Let op, er zijn (veel) meer commando's nodig.

Nu komt het, in dec.2012 moest ik PicBasic nog helemaal leren.
 
[Bericht gewijzigd door Henk (NL) op Vrijdag 10 Januari 2014 18:19:59]

[1] 2 3 »

Active Topics

» Inrichting laadruimte ...
» schema HK audio pro 21...
» Stroom verdeelbox 230V...
» Subaru Outback 2016
» Stofafzuiging
» Aanpassingen aanbouwde...
» Audi
» Show je mini projecten
» Puls schkelaar
» Draadknipper

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2019 SchemaTheek
Laadtijd: 0.05585 sec.