Skip to content

Instantly share code, notes, and snippets.

@BanksySan
Last active December 15, 2021 22:17
Show Gist options
  • Save BanksySan/790126fe71f128d54e9792a3f3031b49 to your computer and use it in GitHub Desktop.
Save BanksySan/790126fe71f128d54e9792a3f3031b49 to your computer and use it in GitHub Desktop.
Arduino/ATMega328 Snippets
Serial.println("SCHAR_MIN = " + String(SCHAR_MIN, DEC) + ", " + String(SCHAR_MIN, HEX)); // minimum value for a signed char
Serial.println("SCHAR_MAX = " + String(SCHAR_MAX, DEC) + ", " + String(SCHAR_MAX, HEX)); // maximum value for a signed char
Serial.println("UCHAR_MAX = " + String(UCHAR_MAX, DEC) + ", " + String(UCHAR_MAX, HEX)); // maximum value for an unsigned char
Serial.println("CHAR_MIN = " + String(CHAR_MIN, DEC) + ", " + String(CHAR_MIN, HEX)); // minimum value for a char
Serial.println("CHAR_MAX = " + String(CHAR_MAX, DEC) + ", " + String(CHAR_MAX, HEX)); // maximum value for a char
Serial.println("SHRT_MIN = " + String(SHRT_MIN, DEC) + ", " + String(SHRT_MIN, HEX)); // minimum value for a short
Serial.println("SHRT_MAX = " + String(SHRT_MAX, DEC) + ", " + String(SHRT_MAX, HEX)); // maximum value for a short
Serial.println("USHRT_MAX = " + String(USHRT_MAX, DEC) + ", " + String(USHRT_MAX, HEX)); // maximum value for an unsigned short
Serial.println("INT_MIN = " + String(INT_MIN, DEC) + ", " + String(INT_MIN, HEX)); // minimum value for an int
Serial.println("INT_MAX = " + String(INT_MAX, DEC) + ", " + String(INT_MAX, HEX)); // maximum value for an int
Serial.println("UINT_MAX = " + String(UINT_MAX, DEC) + ", " + String(UINT_MAX, HEX)); // maximum value for an unsigned int
Serial.println("LONG_MIN = " + String(LONG_MIN, DEC) + ", " + String(LONG_MIN, HEX)); // minimum value for a long
Serial.println("LONG_MAX = " + String(LONG_MAX, DEC) + ", " + String(LONG_MAX, HEX)); // maximum value for a long
Serial.println("ULONG_MAX = " + String(ULONG_MAX, DEC) + ", " + String(ULONG_MAX, HEX)); // maximum value for an unsigned long
Serial.println("LLONG_MIN = " + String(LLONG_MIN, DEC) + ", " + String(LLONG_MIN, HEX)); // minimum value for a long long
Serial.println("LLONG_MAX = " + String(LLONG_MAX, DEC) + ", " + String(LLONG_MAX, HEX)); // maximum value for a long long
Serial.println("ULLONG_MAX = " + String(ULLONG_MAX, DEC) + ", " + String(ULLONG_MAX, HEX)); // maximum value for an unsigned long long
Serial.println("PTRDIFF_MIN = " + String(PTRDIFF_MIN, DEC) + ", " + String(PTRDIFF_MIN, HEX)); // minimum value of ptrdiff_t
Serial.println("PTRDIFF_MAX = " + String(PTRDIFF_MAX, DEC) + ", " + String(PTRDIFF_MAX, HEX)); // maximum value of ptrdiff_t
Serial.println("SIZE_MAX = " + String(SIZE_MAX, DEC) + ", " + String(SIZE_MAX, HEX)); // maximum value of size_t
Serial.println("SIG_ATOMIC_MIN = " + String(SIG_ATOMIC_MIN, DEC) + ", " + String(SIG_ATOMIC_MIN, HEX)); // minimum value of sig_atomic_t
Serial.println("SIG_ATOMIC_MAX = " + String(SIG_ATOMIC_MAX, DEC) + ", " + String(SIG_ATOMIC_MAX, HEX)); // maximum value of sig_atomic_t
Serial.println("WINT_MIN = " + String(WINT_MIN, DEC) + ", " + String(WINT_MIN, HEX)); // minimum value of wint_t
Serial.println("WINT_MAX = " + String(WINT_MAX, DEC) + ", " + String(WINT_MAX, HEX)); // maximum value of wint_t
Serial.println("WCHAR_MIN = " + String(WCHAR_MIN, DEC) + ", " + String(WCHAR_MIN, HEX)); // minimum value of wchar_t
Serial.println("WCHAR_MAX = " + String(WCHAR_MAX, DEC) + ", " + String(WCHAR_MAX, HEX)); // maximum value of wchar_t
Serial.println("CHAR_BIT = " + String(CHAR_BIT, DEC) + ", " + String(CHAR_BIT, HEX)); // number of bits in a char
Serial.println("MB_LEN_MAX = " + String(MB_LEN_MAX, DEC) + ", " + String(MB_LEN_MAX, HEX)); // maximum length of a multibyte character in bytes
Serial.println("FLT_MIN = " + String(FLT_MIN, DEC) + ", " + String(FLT_MIN, HEX)); // smallest normalised positive value of a float
Serial.println("FLT_MAX = " + String(FLT_MAX, DEC) + ", " + String(FLT_MAX, HEX)); // largest positive finite value of a float
Serial.println("DBL_MIN = " + String(DBL_MIN, DEC) + ", " + String(DBL_MIN, HEX)); // smallest normalised positive value of a double
Serial.println("DBL_MAX = " + String(DBL_MAX, DEC) + ", " + String(DBL_MAX, HEX)); // largest positive finite value of a double
Serial.println("LDBL_MIN = " + String(LDBL_MIN, DEC) + ", " + String(LDBL_MIN, HEX)); // smallest normalised positive value of a long double
Serial.println("LDBL_MAX = " + String(LDBL_MAX, DEC) + ", " + String(LDBL_MAX, HEX)); // largest positive finite value of a long double
Serial.println("FLT_DIG = " + String(FLT_DIG, DEC) + ", " + String(FLT_DIG, HEX)); // the number of decimal digits guaranteed to be preserved converting from text to float and back to text
Serial.println("DBL_DIG = " + String(DBL_DIG, DEC) + ", " + String(DBL_DIG, HEX)); // the number of decimal digits guaranteed to be preserved converting from text to double and back to text
Serial.println("LDBL_DIG = " + String(LDBL_DIG, DEC) + ", " + String(LDBL_DIG, HEX)); // the number of decimal digits guaranteed to be preserved converting from text to long double and back to text
#include <Arduino.h>
void resetTimerRegisters();
void initialisePrescalerBits();
void initialiseControlBits();
void initialiseTriggerBits();
void initialiseComparisonValues();
void setPrescaler(word scaleFactor);
__attribute__((unused))
void setup() {
Serial.begin(9600);
while (!Serial) { }
Serial.println();
Serial.println("================");
Serial.println("Fun With Timers");
Serial.println("================");
pinMode(2, OUTPUT);
noInterrupts();
resetTimerRegisters();
initialiseControlBits();
initialisePrescalerBits();
initialiseTriggerBits();
initialiseComparisonValues();
interrupts();
}
void initialiseComparisonValues() {
OCR2A = 200;
OCR2B = 50;
}
void initialiseTriggerBits() {
TIMSK2 |= _BV(OCIE2A);
TIMSK2 |= _BV(OCIE2B);
}
void initialiseControlBits() {
TCCR2A |= _BV(WGM20);
TCCR2A |= _BV(WGM21);
TCCR2A |= _BV(COM2A0);
}
void initialisePrescalerBits() {
setPrescaler(0);
}
void resetTimerRegisters() {
TCCR2A &= B00001100;
TCCR2B &= B00110000;
TIMSK2 &= B11111000;
}
__attribute__((unused))
void loop() {
}
__attribute__((unused))
void serialEvent() {
if (Serial.available()) {
String input = Serial.readString();
Serial.println("Received: \"" + input + "\"");
char command = input[0];
switch (command) {
case 'p':
case 'P': {
word scaleFactor = input.substring(1).toInt();
setPrescaler(scaleFactor);
break;
}
default: {
Serial.println("Unknown command.");
break;
}
}
}
}
ISR(TIMER2_COMPA_vect) {
digitalWrite(2, LOW);
}
ISR(TIMER2_COMPB_vect) {
digitalWrite(2, HIGH);
}
void setPrescaler(word scaleFactor) {
Serial.println("Set Prescaler: " + String(scaleFactor));
TCCR2B &= B1111000;
switch (scaleFactor) {
case 0:
Serial.println("case 0 (" + String(scaleFactor) + "). Timer disabled.");
break;
case 1:
Serial.println("case 1 (" + String(scaleFactor) + ").");
TCCR2B |= _BV(CS20);
break;
case 8:
Serial.println("case 8 (" + String(scaleFactor) + ").");
TCCR2B |= _BV(CS21);
break;
case 64:
Serial.println("case 64 (" + String(scaleFactor) + ").");
TCCR2B |= _BV(CS20);
TCCR2B |= _BV(CS21);
break;
case 256:
Serial.println("case 256 (" + String(scaleFactor) + ").");
TCCR2B |= _BV(CS22);
break;
case 1024:
Serial.println("case 1024 (" + String(scaleFactor) + ").");
TCCR2B |= _BV(CS20);
TCCR2B |= _BV(CS22);
break;
default:
Serial.println("ERROR: Invalid prescaler factor (" + String(scaleFactor) + ")");
break;
}
Serial.println( "TCCR2B = " + String(TCCR2B, BIN));
}
ISR(INT0_vect) { /* External Interrupt Request 0 */
Serial.println("INT0_vect");
}
ISR(INT1_vect) { /* External Interrupt Request 1 */
Serial.println("INT1_vect");
}
ISR(PCINT0_vect) { /* Pin Change Interrupt Request 0 */
Serial.println("PCINT0_vect");
}
ISR(PCINT1_vect) { /* Pin Change Interrupt Request 0 */
Serial.println("PCINT1_vect");
}
ISR(PCINT2_vect) { /* Pin Change Interrupt Request 1 */
Serial.println("PCINT2_vect");
}
ISR(WDT_vect) { /* Watchdog Time-out Interrupt */
Serial.println("WDT_vect");
}
ISR(TIMER2_COMPA_vect) { /* Timer/Counter2 Compare Match A */
Serial.println("TIMER2_COMPA_vect");
}
ISR(TIMER2_COMPB_vect) { /* Timer/Counter2 Compare Match A */
Serial.println("TIMER2_COMPB_vect");
}
ISR(TIMER2_OVF_vect) { /* Timer/Counter2 Overflow */
Serial.println("TIMER2_OVF_vect");
}
ISR(TIMER1_CAPT_vect) { /* Timer/Counter1 Capture Event */
Serial.println("TIMER1_CAPT_vect");
}
ISR(TIMER1_COMPA_vect) { /* Timer/Counter1 Compare Match A */
Serial.println("TIMER1_COMPA_vect");
}
ISR(TIMER1_COMPB_vect) { /* Timer/Counter1 Compare Match B */
Serial.println("TIMER1_COMPB_vect");
}
ISR(TIMER1_OVF_vect) { /* Timer/Counter1 Overflow */
Serial.println("TIMER1_OVF_vect");
}
ISR(TIMER0_COMPA_vect) { /* TimerCounter0 Compare Match A */
Serial.println("TIMER0_COMPA_vect");
}
ISR(TIMER0_COMPB_vect) { /* TimerCounter0 Compare Match B */
Serial.println("TIMER0_COMPB_vect");
}
ISR(TIMER0_OVF_vect) { /* Timer/Couner0 Overflow */
Serial.println("TIMER0_OVF_vect");
}
ISR(SPI_STC_vect) { /* SPI Serial Transfer Complete */
Serial.println("SPI_STC_vect");
}
//ISR(USART_RX_vect) { /* USART Rx Complete */
// Serial.println("USART_RX_vect");
//}
//ISR(USART_UDRE_vect) { /* USART, Data Register Empty */
// Serial.println("USART_UDRE_vect");
//}
ISR(USART_TX_vect) { /* USART Tx Complete */
Serial.println("USART_TX_vect");
}
ISR(ADC_vect) { /* ADC Conversion Complete */
Serial.println("ADC_vect");
}
ISR(EE_READY_vect) { /* EEPROM Ready */
Serial.println("EE_READY_vect");
}
ISR(ANALOG_COMP_vect) { /* Analog Comparator */
Serial.println("ANALOG_COMP_vect");
}
ISR(TWI_vect) { /* Two-wire Serial Interface */
Serial.println("TWI_vect");
}
Vector name Vector definition
INT0_vect External Interrupt Request 0
INT1_vect External Interrupt Request 1
PCINT0_vect Pin Change Interrupt Request 0
PCINT1_vect Pin Change Interrupt Request 0
PCINT2_vect Pin Change Interrupt Request 1
WDT_vect Watchdog Time-out Interrupt
TIMER2_COMPA_vect Timer/Counter2 Compare Match A
TIMER2_COMPB_vect Timer/Counter2 Compare Match A
TIMER2_OVF_vect Timer/Counter2 Overflow
TIMER1_CAPT_vect Timer/Counter1 Capture Event
TIMER1_COMPA_vect Timer/Counter1 Compare Match A
TIMER1_COMPB_vect Timer/Counter1 Compare Match B
TIMER1_OVF_vect Timer/Counter1 Overflow
TIMER0_COMPA_vect TimerCounter0 Compare Match A
TIMER0_COMPB_vect TimerCounter0 Compare Match B
TIMER0_OVF_vect Timer/Couner0 Overflow
SPI_STC_vect SPI Serial Transfer Complete
USART_RX_vect USART Rx Complete
USART_UDRE_vect USART, Data Register Empty
USART_TX_vect USART Tx Complete
ADC_vect ADC Conversion Complete
EE_READY_vect EEPROM Ready
ANALOG_COMP_vect Analog Comparator
TWI_vect Two-wire Serial Interface
SPM_READY_vect Store Program Memory Read
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment