Kan ik bij de mini-cursus van pic basic met het 2x16 display de 16f628a vervangen door een 16f84a. Denk wel een kristal er dan aanhangen van 4MHz?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
De 628A is de nieuwere versie van de 84A. Dus kwa configuratie zal het niet enorm veel verschillen (er zal vast wel wát zijn). Ik zou zeggen, probeer het gewoon met dezelfde code, en evt. DEVICE 16F628A veranderen in DEVICE 16F84A. Want ik neem aan dat je Proton PIC Basic (lite?
) gebruikt?
Turbokeu
Golden Member
I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
Alle verschillen tussen 16F84 en 16F62x/648:
* Tips on source code migration from PIC16F84 series to PIC16F62x/648 series *
1. If using PORTA pins as interfacing I/O you need to define/set the I/O function for PIC16F62x/648 series.
Generally, the initial PORTA setting is as following for I/O function:
CLRF PORTA
MOVLW 0x07 ; turn comparators off and
MOVWF CMCON ; enable pins for I/O functions
Note: Ensure the above setting is done in Bank 0. The above setting is especially important if you want to migrate the source code from PIC16F84 series to PIC16F62X/648 series.
2. Always refer to data memory MAP (on PIC datasheet) to ensure that the general purpose registers (GPR) used are not out of range when migrating one type of MCU to another type of MCU.
As example, general purpose registers for:
PIC16F84 :
0x0C to 0x4F (bank0)
PIC16F628:
0x20 to 0x7F (bank0)
0xA0 to 0xEF (bank1)
0x120 to 0x14F (bank2)
PIC16F648:
0x20 to 0x7F (bank0)
0xA0 to 0xEF (bank1)
0x120 to 0x16F (bank2)
3. When using bit 4 (RB4) of PORTB of PIC16F62X/648 series as an output pin, ensure that the MCU is not configured for low voltage programming mode (LVP, see Microchip datasheet). If not it will be set as a Schmitt Trigger input independently of TRISB register I/O direction setting.
4. Check oscillator settings: 16F84 has only two configuration bits and four oscillator modes, 16F62x/648 has three configuration bits and additionnal modes (see PIC datasheet - Special features of the CPU).
5. EEPROM Registers:
PIC16F84 : EEDATA register is in bank0
PIC16F62X/648: EEDATA register is in bank1
Het is voor mij al een tijdje geleden, maar voor zover ik weet kun je deze 2 gewoon 1 op 1 met elkaar wisselen.
Heb ik een tijd terug ook weleens gedaan.
Je moet wel even op letten dat in de bovenste regel van je programmacode de benaming van de pic wordt veranderd.
Waarom dat moet en of dat moet weet ik eigenlijk niet maar dat deed ik wel altijd namelijk.
succes!
Turbokeu
Golden Member
I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
Op 30 januari 2011 10:01:42 schreef Joffel:
Het is voor mij al een tijdje geleden, maar voor zover ik weet kun je deze 2 gewoon 1 op 1 met elkaar wisselen.
Niet dus (vorige post niet gelezen?).
Eén en ander is afhankelijk of je 16F84 code op een 16F628 of omgekeerd wil draaien:
16F84 naar 16F628:
- Configuratiebits moeten al dan niet aangepast worden (oscillatormodes en LVP programming)
- PortA comparators moeten uitgeschakeld worden voor digitale I/O
- Bij access van het EEPROM geheugen moet er rekening gehouden worden dat het register EEDATA in bank1 i.p.v. bank0 ligt
- Indien bit4 van PortB (RB4) als output gebruikt moet worden moet LVP programming mode via de configuratiebits uitgeschakeld worden
- Dataram adressen (GPR's) starten vanaf 0x20 i.p.v. 0x0C (CBLOCK directive en absolute declaraties van variabelen!)
16F628 naar 16F84:
- 16F84 kent geen interne 4MHz oscillatormode
- 16F84 kent geen LVP programming mode
- Configuratiebits moeten al dan niet aangepast worden (oscillatormodes en LVP programming)
- 16F84 heeft geen PortA comparators
- EEDATA register ligt in bank0
Je moet wel even op letten dat in de bovenste regel van je programmacode de benaming van de pic wordt veranderd.
Waarom dat moet en of dat moet weet ik eigenlijk niet maar dat deed ik wel altijd namelijk.
Dat moet je sowieso altijd doen.
Het LIST compiler directive en het .INC bestand maken aan de MPASM compiler wijs met welke PIC processor je werkt en welke SFR's (Special Function Registers) de desbetreffende PIC kent en waar (adres, bank) deze zich bevinden.
Ook definieert het de mogelijke configuratiebits en de adressen van het datageheugen (GPR's, General Purpose Registers).
Elk ASM source bestand moet dus beginnen met de definitie van de gebruikte processor, bvb.:
LIST p=16F628A ; PIC16F628A is the target processor
#include "P16F628A.INC" ; Include header file
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Iets veranderen in sourcecode 'omdat het werkt' is heel griezelig. Programmeren is geen kansspel... 
Beter de datasheet even doorlezen. Dan weet je ook wat en waarom je iets doet...
Vooral om dat afgezien van de overige verschillen de 16F84 64bytes RAM heeft en de 16F628 224, dus ruim 3 maal zoveel.