I am designing a binary coded watch with an attiny1616 MCU and an LED watchface. The matrix I designed is displayed below along with the rest of the schematic. The LEDs is 2.1V 30mA and I plan to drive the anode with PWM. The supply voltage is 3V from a CR2032 coin cell. What resistor values do the LEDs need, and will resistors degrade PWM performance? Do I need resistors at all?
According to the attiny1616 datasheet the absolute max source/sink current of any IO pin is +/-40mA and the total source or the total sink of all IO pins is limited to 100mA.
I am assuming you shall be driving R1 to R4 high, one at a time. With your advertised resistor placement, the brightness of a particular LED on a given channel (eg. on R1) will depend on how many other LEDs are also illuminated on that same channel. This is because they all share the same current limiting resistor. To avoid this problem, you should put the current limiting resistors on the C1-C6 lines instead.
If you do this then you must choose a resistance so that even when all LEDs are on, you don't exceed the maximum source current (40mA) on the R1-R4 pins. Dividing 40mA/6channels = ~6mA allocation to each C1-C6. Looking at the LED datasheet the forward voltage drop at 6mA is about 1.9V. So 180ohm resistors would work well.
Assuming each of the R1-R4 channels are on for 25% of the time. The average LED current would be 6mA x 25% = 1.5mA. That's still enough current to have a bright enough LED for you purposes.
Ensure you run at a high enough frequency to have no flicker (>90 Hz). Perhaps add a 100uF decoupling capacitor to smoothen and reduce the peak currents on you small coin cell battery.
This is not something you can calculate because it depends on how bright the LEDs look to you and what is acceptable. You can't get anywhere near the rated current.
I suggest you try playing around with a breadboard with a few K and see if that's usable. If you don't have a breadboard to test, multiply the resistor value by 4 (your matrix when properly driven will have a 1:4 duty cycle) and test that brightness. For example, if a 5K resistor was to be deemed suitable for the final unit try a 20K resistor with a CR2032 + LED and see how it looks to you. The time to do this is before you finalize circuit boards and send them off for fabrication and PCBA.
If that's too dim you may have to look at some other power source such as a Li-ion battery, but of course that raises a whole bunch of other considerations (charging and whether you have enough energy for the device to be useable for long enough). Smart watches are pretty clever with how they switch their LEDs (backlight or OLED) to maximize time between charges.
You do not need any resistors, the internal resistance of the battery will be the limiting factor on how much current gets to the LEDs. You can then PWM to control the brightness of the LEDs.
In my experience it is also usually easier to scan the LEDs individually rather than by full row or column. If you try to light more than one LED at once then you will have to compensate for the decreased brightness becuase both LEDs are drawing current at the same time. That chip should be more than fast enough to do this without visual flashing.
Finally, if you do not want to display to get dimmer as the battery voltage drops, you can compensate by measuring the battery voltage and then increasing the LED duty cycle as it goes down.