News:

;) This forum is the property of Proton software developers

Main Menu

Transferring problems 18F46k22 to 18F47Q84 where is my MSSP

Started by Amateurtje, Mar 15, 2025, 03:03 PM

Previous topic - Next topic

Amateurtje

Hello all,

Does anybody have any experience with transferring a program or using a new device like the 18F47k84?

I run into a lot of problems trying to put it over. I have the datasheets but they are very very big and I am not the best in reading and processing big pieces of english text.. SO I thought, lets open for my first big problem I run into a question.

I use some I2C in my program but get now the error in the compiler:
"The Microcontroller does not contain a suitable MSSP peripheral!(24LC256_H.inc)"

Anyobody already had this issue? or any ideas?

flosigud

It is hardware IIC that is not supported in newer PIC's. That's no loss as software ICC is just as good.

Amateurtje


Thanks for the info...
I deleted everywhere the H like in:
Hbusout to busout.

Correct?

and I made:

INLVLC.4 = 0 ''Use TTL LEVELS       moet misschien toch 1 zijn...
INLVLC.3 = 0 ''Use TTL LEVELS
SLRCONC.4 = 0
SLRCONC.3 = 0
ODCONC.4 = 1
ODCONC.3 = 1
TRISC.3 = 0
Declare SDA_Pin = PORTC.4           ' SDA connected to this pin
Declare SCL_Pin = PORTC.3           ' SCL connected to this pin
''Declare Hbus_Bitrate 100            ' Bus frequency 100kHz to 1000 Khz
Declare Hbus_Bitrate 400
Declare Slow_Bus = On    ''??

' Uncomment the next line to disable the NACK function.
$define _DisableNACK_
$define _24LC512_

   Include "24LC256_H.inc"

I hope this works..

Next problem is UARt.... TXSTA2 is not recognised. I tihnk the Tx and RX are freely defined. But i do not see yet how to seperate them form eachother... For example, I see only TXEN but no TXEN2 or something...

Pfftt. heavy ..

Amateurtje

Not Ready yet with UART, But coming back to IIC:

In the PPI file, it has a section:
Hardware I2C Pin Definitions
[HI2CSTART]
_I2C_SDA_PORT = TRISC
_I2C_SDA_PIN = 4
_I2C_SCL_PORT = TRISC
_I2C_SCL_PIN = 3
[HI2CEND]

If it would not have a hardware IIC, is that logical this is in the PPI file?

PS, @LES, you have to go through all those Datasheets?? How can you stay awake.... What a job... I get dizzy reading 1 page....Respect

Frizie

Amateurtje, just curious, what are the reasons you switched from 18F46k22 to 18F47Q84?
Ohm sweet Ohm | www.picbasic.nl

Amateurtje

Hi Frizzie,

I need minimal 3 UARTS, I need really more code space (99% full and many more new ideas) and I need to have minimal the same amount of pins (prefer more, but that, I can not find).. It can not be finepitch, while I can not place or solder or repair that accuratly on my own (selfmade) pick and place machine :).so smaller pins/pitch than the TQFP44 is not a real option..

Therefore I could not find a lot good ideas.. Another idea is using 2 PIC's but splitting the program might be difficult.. (although I still might put another PIC next to it to have more I/O's..)

Although have bought some parts but not yet finished my new pcb, I am still open for other good ideas...

Probably the program cna be a bit more efficient but a lot of work for minimal gain does not make a lot of sense... honestly also, it is nicer to add more functionality than putting the time in some efficiency gains...

Amateurtje

Quote from: flosigud on Mar 15, 2025, 03:15 PMIt is hardware IIC that is not supported in newer PIC's. That's no loss as software ICC is just as good.

Is this true, and if yes, why is that section in the ppi file??
Hardware I2C Pin Definitions
[HI2CSTART]
_I2C_SDA_PORT = TRISC
_I2C_SDA_PIN = 4
_I2C_SCL_PORT = TRISC
_I2C_SCL_PIN = 3
[HI2CEND]


flosigud

I have no idea. I don't claim any knowledge of recent 18F PIC's. 18F26K22 was the last one I worked with.

Amateurtje

Quote from: flosigud on Mar 24, 2025, 10:43 AMI have no idea. I don't claim any knowledge of recent 18F PIC's. 18F26K22 was the last one I worked with.

Untill this project, same for me..

unfortunatly i am already a long time running into its limitationsso i need to transfer but it is hard.....I need to do this for a logn time now.. But to convert the current software is not a small task...probably PCB changes etc...

But every weekend a small step..

Pepe

I used the example written by LESS of the UART for Q41 and I have modified it for Q84 to see if it works

John Lawton

Quote from: Amateurtje on Mar 16, 2025, 10:57 AMI need minimal 3 UARTS, I need really more code space (99% full and many more new ideas) and I need to have minimal the same amount of pins (prefer more, but that, I can not find).. It can not be finepitch, while I can not place or solder or repair that accuratly on my own (selfmade) pick and place machine :).so smaller pins/pitch than the TQFP44 is not a real option.

Have you look ed at the range of 16 bit PICs, maybe something there that would do the job?

John

Amateurtje

@ pepe,

Thanks, i will take a look..

@ JOhn,

I used the selectiontool several times but did not see a lot coming but would a 16bit pic make my life a lot easier? I thought staying in the same range, the transition might be the easiest.....
maybe wrong thinking..

The only  thing which is missing are more inputs.. Thats still a problem

John Lawton

I haven't checked the 16 bit range but generally speaking they have a good  amount of peripherals, hopefully you can find one with 3 x UARTS. Enough code space should not be a problem.

John

trastikata

Many of the supported PICs have minimum 3 USART modules, large RAM and FLASH space, also speed is not simply doubled by Fosc/2 instead of Fosc/4 clocks per instruction but the additional instructions and the wider bus make code much more efficient. 


Frizie

I also looked at 16-bit.
The first thing I ran into is that many only go up to 3.3V and many are not available in DIL housing.
Keep that in mind if you want to replace a 40-pin 8-bit with a 16-bit.
You often cannot swap them 1:1.
Ohm sweet Ohm | www.picbasic.nl

Amateurtje

This pic does check all boxes, only the box of more I/O ports.. But I do not want to have a smaller pitch than TQFP44 so I do not think any pic will meet that demand..

If this pic meets almost all my wishes, why would it be smarter to go 16 bit? Because it is more efficient on code?

However, I do not think I can drop it in my existing PCB instead of my 18F46k22 but as a test I soldered it onto a pcb to try to get it to work with at least the LCD display..

Just a crazyt idea (to free up some I/O's in the future:

Is it possible to leave a print commands, (or very small changes) and thensend the display info to a second pic which puts it onto the display? (HD44780).. This is now 6 lines and if I can reduce it to 1 or 2 than it would make 4 ports available....

RGV250

QuoteIs it possible to leave a print commands, (or very small changes) and thensend the display info to a second pic which puts it onto the display? (HD44780).. This is now 6 lines and if I can reduce it to 1 or 2 than it would make 4 ports available....

You could use a serial display, only one port pin then.
This is the one I use  https://thepihut.com/products/sparkfun-20x4-serlcd-rgb-backlight-qwiic?variant=39558441009347&country=GB&currency=GBP&utm_medium=product_sync&utm_source=google&utm_content=sag_organic&utm_campaign=sag_organic&srsltid=AfmBOooLDhOgCroqrkfVUEpxqjjUnVjyOCNXyFwlAI26YouT5wHSKxRUPVI&gQT=1

Bob

Amateurtje

mmm , but what is the disadvantage? speed? code space? big changes (I have a lot of print commands..).

I never worked with a serial display althoguh I was playing with a tft display in the past but that was slow (but was color)..... I was thinking of a "Inbetween" pic? and maybe in the future to a nicer display like tft from that second pic...

RGV250

Hi,
I only use these for debugging normally but this is a test i used for a PIC24 device. It will take a bit more code space up and I cannot really comment on speed but I don't think I ever noticed any.
As for big changes you can see here that the print commands are not much different due to the procedures.

Bob

Demo code just shows an incrementing value and changes the background colour on the value.
'****************************************************************
'*  Name    : 24_CC_SD_2.BAS                                    *
'*  Author  : Bobby Garrett                                     *
'*  Notice  : Copyright (c) 2020 Bobby Garrett                  *
'*          : All Rights Reserved                               *
'*  Date    : 04/10/2020                                        *
'*  Version : 2.0                                               *
'*  Notes   : Cool Components serial display test using 24 bit  *
'*          : PIC                                               *
'****************************************************************
'  ____/\\\\\\\\\_________/\\\\\\\\\\\\__/\\\________/\\\____/\\\\\\\\\_______/\\\\\\\\\\\\\\\______/\\\\\\\____       
'   __/\\\///////\\\_____/\\\//////////__\/\\\_______\/\\\__/\\\///////\\\____\/\\\///////////_____/\\\/////\\\__       
'    _\/\\\_____\/\\\____/\\\_____________\//\\\______/\\\__\///______\//\\\___\/\\\_______________/\\\____\//\\\_     
'     _\/\\\\\\\\\\\/____\/\\\____/\\\\\\\__\//\\\____/\\\_____________/\\\/____\/\\\\\\\\\\\\_____\/\\\_____\/\\\_     
'      _\/\\\//////\\\____\/\\\___\/////\\\___\//\\\__/\\\___________/\\\//______\////////////\\\___\/\\\_____\/\\\_   
'       _\/\\\____\//\\\___\/\\\_______\/\\\____\//\\\/\\\_________/\\\//____________________\//\\\__\/\\\_____\/\\\_   
'        _\/\\\_____\//\\\__\/\\\_______\/\\\_____\//\\\\\________/\\\/____________/\\\________\/\\\__\//\\\____/\\\__ 
'         _\/\\\______\//\\\_\//\\\\\\\\\\\\/_______\//\\\________/\\\\\\\\\\\\\\\_\//\\\\\\\\\\\\\/____\///\\\\\\\/___
'          _\///________\///___\////////////__________\///________\///////////////___\/////////////________\///////_____


Device = 24HJ128GP502
Declare Xtal = 79.23

' Configure for internal 7.37MHz oscillator with PLL
' OSC pins are general purpose I/O
'
    Config FBS = BWRP_WRPROTECT_OFF, BSS_NO_FLASH, BSS_NO_BOOT_CODE
    Config FSS = SWRP_WRPROTECT_OFF, SSS_NO_FLASH, RSS_NO_SEC_RAM
    Config FGS = GWRP_OFF, GCP_OFF
    Config FOSCSEL = FNOSC_FRCPLL, IESO_OFF
    Config FOSC = POSCMD_NONE, OSCIOFNC_ON, IOL1WAY_OFF, FCKSM_CSDCMD
    Config FWDT = WDTPOST_PS256, WINDIS_OFF, FWDTEN_OFF
    Config FPOR = FPWRT_PWR128, ALTI2C_OFF
    Config FICD = ICS_PGD1, JTAGEN_OFF
   
PLL_Setup(43, 2, 2, $0300)                  'Configure the Oscillator to operate the device at 79.23MHz
   
    Dim Led1 As PORTB.7                     'Just to know the program is running
    Dim Led2 As PORTB.8
    TRISB = 00000000000000
   
    Dim TestValue As Byte
    Clear TestValue 
                                                   
'Delay to allow the lcd to start
    DelayMS 1000                            'Allow time for the display to start

    Declare Hserial_Baud = 9600             'UART1 baud rate
    Declare HRSOut1_Pin = PORTB.5           'Select which pin is to be used for TX with USART1
    PPS_Output(cOut_Pin_RP5, cOut_Fn_U1TX)  'Make Pin RB5 U1TX   
     
' Clear the screen.
        CCSD_Cls()       

'Show the display firmware rev. 
        Show_FW()

'Disable/Enable system messages 0/1       
        CCSD_SysMsg(0)

'Backlight colour (White, Red, Green, Blue, Yellow, Purple, Off.
        BL_Col("White")       
       
'Set contrast, 0 = dark, 255 = bright
        SetContrast(30)

'Main Program Starts Here
Main:   
        SetCursor(2,0)
   
        HRSOut "Test ",Dec TestValue, "  "
       
        If TestValue = 10 Then
        CursorHome()
        HRSOut Dec TestValue, "  "
        EndIf
       
        If TestValue = 0 Then
        BL_Col("White")           
        EndIf     
               
        If TestValue = 50 Then
        BL_Col("Red")           
        EndIf
 
        If TestValue = 100 Then
        BL_Col("Green")           
        EndIf
       
        If TestValue = 150 Then
        BL_Col("Blue")           
        EndIf
       
        If TestValue = 200 Then
        BL_Col("Yellow")           
        EndIf 
'Something strange happens at 251, test data goes blank and tthe value is written to 1,0 and then 252 is OK.
'Try doing it at a different value like 20 or so.       
        If TestValue = 250 Then
        BL_Col("Off")           
        EndIf                     
                 
        High Led1
        Low Led2
        DelayMS 500
        Low Led1
        High Led2
        DelayMS 500
               
        Inc TestValue

        GoTo Main   

'Procedures
       
'Clear the screen.
Proc CCSD_Cls()         
        HRSOut "|"                          'Enter settings mode.
        HRSOut "-"                          'Clear display, move to pos 1,0.       
EndProc 

'Show the display firmware rev.   
Proc Show_FW()       
        HRSOut "|"                          'Enter settings mode.
        HRSOut ","                          'Show firmware command.     
EndProc

'Disable/Enable display system messages. (0/1)
Proc CCSD_SysMsg(pData1 As Byte)
Dim SysMsg As Byte
SysMsg = pData1
If SysMsg = 0 Then   
        HRSOut "|"                          'Enter settings mode.
        HRSOut "/"                          'Disable system messages.
        EndIf
If SysMsg = 1 Then   
        HRSOut "|"                          'Enter settings mode.
        HRSOut "."                          'Enable system messages.
        EndIf                       
EndProc

'Set the display contrast.
Proc SetContrast(pData1 As Byte)
Dim Contrast As Byte
Contrast = pData1
        HRSOut "|"                          'Enter settings mode.
        HRSOut 24                           'Contrast
        HRSOut Contrast                     'Value
EndProc

'Move the cursor to 1,0 without clearing the screen.
Proc CursorHome()
        HRSOut 254                          'Command character
        HRSOut 128 
EndProc

'Position the cursor, Line starts at 1, column starts at 0.       
Proc SetCursor(pData1 As Byte, pData2 As Byte) 
Dim LinePos As Byte
Dim ColumnPos As Byte
Dim TempByte As Byte
LinePos = pData1
ColumnPos = pData2

If LinePos = 1 Then LinePos = 0
If LinePos = 2 Then LinePos = 64
If LinePos = 3 Then LinePos = 20
If LinePos = 4 Then LinePos = 84

TempByte = (128 + LinePos + ColumnPos)      '128 (Change position command) + Line position + Column position)

        HRSOut 254                          'Command character
        HRSOut TempByte 
EndProc   

Proc BL_Col(pMyString As String * 10)
Dim Colour As String * 10
Colour = pMystring

If Colour = "White" Then
'Backlight all on 100% (White)       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 157                          'Red     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 187                          'Green       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 217                          'Blue
        EndIf

If Colour = "Red" Then
'Backlight (Red)       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 157                          'Red     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 158                          'Green     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 188                          'Blue
        EndIf
               
If Colour = "Green" Then
'Backlight (Green)       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 128                          'Red     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 187                          'Green       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 188                          'Blue
        EndIf       

If Colour = "Blue" Then
'Backlight (Blue)       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 128                          'Red     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 158                          'Green       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 217                          'Blue
        EndIf       

If Colour = "Yellow" Then
'Backlight (Yellow)       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 150                          'Red     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 187                          'Green     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 191                          'Blue
        EndIf       
               
If Colour = "Purple" Then
'Backlight (Purple)       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 128                          'Red     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 163                          'Green       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 213                          'Blue
        EndIf 

If Colour = "Off" Then
'Backlight (All colours off)       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 128                          'Red     
        HRSOut "|"                          'Enter settings mode.
        HRSOut 158                          'Green       
        HRSOut "|"                          'Enter settings mode.
        HRSOut 288                          'Blue
        EndIf               
EndProc
   

Amateurtje

#19
I was not able to get the program to run and in the meantime it runs.....(actually do not even know what I changed.. it almost looks that the programmer does not always load the newest hex or something)..

Now I am trying to use the print command but that does not work yet... I do not see the mistake:

;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 18F47Q84
Declare Xtal = 64
Declare Create_Coff On
Config_Start
  FEXTOSC = OFF ;Oscillator not enabled
  RSTOSC = HFINTOSC_64MHZ ;HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1
  CLKOUTEN = OFF ;CLKOUT function is disabled
  PR1WAY = On ;PRLOCKED bit can be cleared and set only once
  CSWEN = On ;Writing to NOSC and NDIV is allowed
  JTAGEN = On ;Enable JTAG Boundary Scan mode and pins
  FCMEN = On ;Fail-Safe Clock Monitor enabled
  FCMENP = On ;FSCM timer will set FSCMP bit and OSFIF interrupt on Primary XTAL failure
  FCMENS = On ;FSCM timer will set FSCMS bit and OSFIF interrupt on Secondary XTAL failure
  MCLRE = EXTMCLR ;If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR
  PWRTS = PWRT_OFF ;PWRT is disabled
  MVECEN = On ;Multi-vector enabled, Vector table used for interrupts
  IVT1WAY = On ;IVTLOCKED bit can be cleared and set only once
  LPBOREN = OFF ;Low-Power BOR disabled
  BOREN = SBORDIS ;Brown-out Reset enabled , SBOREN bit is ignored
  BORV = VBOR_1P9 ;Brown-out Reset Voltage (VBOR) set to 1.9V
  ZCD = OFF ;ZCD module is disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON
  PPS1WAY = On ;PPSLOCKED bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle
  STVREN = On ;Stack full/underflow will cause Reset
  LVP = On ;Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored
  XINST = OFF ;Extended Instruction Set and Indexed Addressing Mode disabled
  WDTCPS = WDTCPS_31 ;Divider ratio 1:65536; software control of WDTPS
  WDTE = OFF ;WDT Disabled; SWDTEN is ignored
  WDTCWS = WDTCWS_7 ;window always open (100%); software control; keyed access not required
  WDTCCS = SC ;Software Control
  BBSIZE = BBSIZE_512 ;Boot Block size is 512 words
  BBEN = OFF ;Boot block disabled
  SAFEN = OFF ;SAF disabled
  WRTB = OFF ;Boot Block not Write protected
  WRTC = OFF ;Configuration registers not Write protected
  WRTD = OFF ;Data EEPROM not Write protected
  WRTSAF = OFF ;SAF not Write Protected
  WRTAPP = OFF ;Application Block not write protected
  BOOTPINSEL = RC5 ;CRC on boot output pin is RC5
  BPEN = OFF ;CRC on boot output pin disabled
  ODCON = OFF ;Pin drives both high-going and low-going signals
  Cp = OFF ;PFM and Data EEPROM code protection disabled
  BOOTSCEN = OFF ;CRC on boot will not include the boot area of program memory in its calculation
  BOOTCOE = HALT ;CRC on boot will stop device if error is detected in boot areas
  APPSCEN = OFF ;CRC on boot will not include the application area of program memory in its calculation
  SAFSCEN = OFF ;CRC on boot will not include the SAF area of program memory in its calculation
  DATASCEN = OFF ;CRC on boot will not include data EEPROM in its calculation
  CFGSCEN = OFF ;CRC on boot will not include the configuration fuses in its calculation
  COE = HALT ;CRC on boot will stop device if error is detected in non-boot areas
  BOOTPOR = OFF ;CRC on boot will not run
  BCRCPOLT = hFF ;Bits 31:24 of BCRCPOL are 0xFF
  BCRCPOLU = hFF ;Bits 23:16 of BCRCPOL are 0xFF
  BCRCPOLH = hFF ;Bits 15:8 of BCRCPOL are 0xFF
  BCRCPOLL = hFF ;Bits 7:0 of BCRCPOL are 0xFF
  BCRCSEEDT = hFF ;Bits 31:24 of BCRCSEED are 0xFF
  BCRCSEEDU = hFF ;Bits 23:16 of BCRCSEED are 0xFF
  BCRCSEEDH = hFF ;Bits 15:8 of BCRCSEED are 0xFF
  BCRCSEEDL = hFF ;Bits 7:0 of BCRCSEED are 0xFF
  BCRCEREST = hFF ;Bits 31:24 of BCRCERES are 0xFF
  BCRCERESU = hFF ;Bits 23:16 of BCRCERES are 0xFF
  BCRCERESH = hFF ;Bits 15:8 of BCRCERES are 0xFF
  BCRCERESL = hFF ;Bits 7:0 of BCRCERES are 0xFF
  CRCPOLT = hFF ;Bits 31:24 of CRCPOL are 0xFF
  CRCPOLU = hFF ;Bits 23:16 of CRCPOL are 0xFF
  CRCPOLH = hFF ;Bits 15:8 of CRCPOL are 0xFF
  CRCPOLL = hFF ;Bits 7:0 of CRCPOL are 0xFF
  CRCSEEDT = hFF ;Bits 31:24 of CRCSEED are 0xFF
  CRCSEEDU = hFF ;Bits 23:16 of CRCSEED are 0xFF
  CRCSEEDH = hFF ;Bits 15:8 of CRCSEED are 0xFF
  CRCSEEDL = hFF ;Bits 7:0 of CRCSEED are 0xFF
  CRCEREST = hFF ;Bits 31:24 of CRCERES are 0xFF
  CRCERESU = hFF ;Bits 23:16 of CRCERES are 0xFF
  CRCERESH = hFF ;Bits 15:8 of CRCERES are 0xFF
  CRCERESL = hFF ;Bits 7:0 of CRCERES are 0xFF
Config_End

'NDIV 1; NOSC HFINTOSC;
OSCCON1 = $60
'SOSCPWR Low power; CSWHOLD may proceed;
OSCCON3 = 0
'EXTOEN disabled; HFOEN disabled; MFOEN disabled; LFOEN disabled; SOSCEN disabled; ADOEN disabled; PLLEN disabled;
OSCEN = $00
'HFFRQ 64_MHz;
OSCFRQ = $08
OSCTUNE = 0
 
TRISA = %11110000                                 ;
TRISB = %11001111                                 ; PORTB connected to LCD
TRISC = %10010110                                 ;
TRISD = %10001010
TRISE = %00001101

Declare LCD_Lines 4                         
Declare LCD_DTPin  PORTA.0
Declare LCD_ENPin  PORTB.5
Declare LCD_RSPin  PORTB.4

Symbol DTA = PORTD.5     ; op 14  output
Symbol Clock=PORTD.4    ; op pin 11  output
Symbol Latch = PORTC.5    ; op pin 12  output
Symbol Hoofdstroom = PORTC.0
       Hoofdstroom =0
Clear 
DelayMS 200
Cls
 
main:
    DTA = 1                                             ;A0
    Clock = 1                                           ;A1
    Latch = 0                                           ;A3
    Hoofdstroom =0
    Print "Hoi"
    DelayMS 1000
GoTo main:
End


The output Hoofdstroom, DTA, clock latch are making sure the screen and backlight is powered but there are only blocks...